- 这不是注释处理的工作方式。在处理过程中无法获取对象,因为要定义的类正在编译中!如果你调用一个未知的类或使用,你会得到一个完全没问题。
Class<?>
getClass()
Class<?> clazz = Class.forName("com.your.fancy.Class")
java.lang.ClassNotFoundException
- 您需要使用诸如 和 之类的类来描述/读取类定义。
javax.lang.model.element.Element
javax.lang.model.element.ExecutableElement
- 有
javax.lang.model.type.TypeMirror
来描述类,它们的字段,方法等。javax.lang.model.*
- 如果您需要更多见解,只需包含来自java编译器(JAVA SDK)的工具.jar,即可获得更多在编译期间使用的类型定义。但最有可能的是 - 你不需要添加这个jar依赖关系!
- 你会得到即使这是真的。
ClassNotFoundException
roundEnvironment.processingOver()
-
简而言之:在要使用类类型的所有位置使用TypeMirror。
例子:
public static @Nonnull List getMethods(@Nonnull Element annotationElem, @Nonnull RoundEnvironment roundEnvironment) {
List outList = new ArrayList();
String simpleName = annotationElem.getSimpleName().toString();
for (Element elem : roundEnvironment.getRootElements())
if (elem.getSimpleName().toString().equals(simpleName))
for (Element methodDeclaration :elem.getEnclosedElements())
if (methodDeclaration instanceof ExecutableElement)
outList.add((ExecutableElement)methodDeclaration);
return outList;
}
public static TypeMirror getMethodFirstParam(@Nonnull ExecutableElement method, int n) {
List parameters = ((ExecutableElement) method).getParameters();
if (parameters != null && parameters.size() > 0)
return parameters.get(n).asType();
return null;
}