Doclet-获取列表的泛型

rch*_*rch 7 java generics javadoc

我正在编写一个扩展com.sun.javadoc.Doclet的doclet.

当我想要将ArrayList记录为方法的字段时,我希望获得泛型的类型(例如,当记录ArrayList<String>我想要获取的信息时,这是包含字符串的列表).

我只能获取信息,这是一个ArrayList.即使打电话

ParameterizedType paramType = fieldType.asParameterizedType();
Run Code Online (Sandbox Code Playgroud)

我只获取java.util.ArrayList而不是泛型的类型.

有人知道如何获得列表的泛型类型吗?

这是示例代码:

FieldDoc[] fields = classDoc.fields();
for (int k = 0; k < fields.length; k++) {
    Type fieldType = fields[k].type();
    if (fieldType.asParameterizedType() != null) {
        ParameterizedType paramType = fieldType.asParameterizedType();
        String qualiName = paramType.qualifiedTypeName(); // this equals "java.util.ArrayList"
        fieldType.asParameterizedType().toString(); // this equals "java.util.ArrayList"
        fieldType.asParameterizedType().typeName(); // this equals "ArrayList"
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 23

在Java 1.6下编写自定义doclet时,我遇到了类型丢失的泛型.我能够通过将下面的方法添加到我的doclet来解决它.


   /**
    * NOTE: Without this method present and returning LanguageVersion.JAVA_1_5,
    *       Javadoc will not process generics because it assumes LanguageVersion.JAVA_1_1
    * @return language version (hard coded to LanguageVersion.JAVA_1_5)
    */
   public static LanguageVersion languageVersion() {
      return LanguageVersion.JAVA_1_5;
   }
Run Code Online (Sandbox Code Playgroud)

  • 太好了,谢谢!在我发现这个之前我才发疯了! (2认同)
  • 我希望我可以投票一千次. (2认同)

RHS*_*ger -2

假设 ArrayList 是您的类的成员字段,看起来以下答案将提供您所需要的。

该答案中的代码片段显示了总体思路(但请看一下该问题/答案):

Field stringListField = Test.class.getDeclaredField("stringList");
ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType();
Class<?> stringListClass = (Class<?>) stringListType.getActualTypeArguments()[0];
System.out.println(stringListClass); // class java.lang.String.
Run Code Online (Sandbox Code Playgroud)