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)
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)