实例化一个带有注释的 Class
Instantiate a Class annotated with some annotation
我想通过在注解处理器中获取注解,从存在特定注解的 Class 中获取有关 字段 的信息。
我可以从注解中检索完全限定的 class 名称,但无法实例化它,抛出一个 ClassNotFoundException
,尽管 class 在那里。
如何检查 class 是否不在 class 路径中,或者注释处理器包含哪个 class 路径?
try {
Class<?> clazz = Class.forName(((TypeElement) e).getQualifiedName().toString());
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
您试图在问题代码中执行的操作是不可能的,因为注释处理发生在程序完全编译之前。这就是为什么你使用例如TypeElement
个对象而不是 Class
,因为 class 尚未编译。
另一方面,如果您只想检查存在哪些类型的字段,you can use the Element
API for that,例如:
for (Element e : typeElement.getEnclosedElements()) {
if (e.getKind() == ElementKind.FIELD) {
VariableElement field = (VariableElement) e;
//
}
}
我想通过在注解处理器中获取注解,从存在特定注解的 Class 中获取有关 字段 的信息。
我可以从注解中检索完全限定的 class 名称,但无法实例化它,抛出一个 ClassNotFoundException
,尽管 class 在那里。
如何检查 class 是否不在 class 路径中,或者注释处理器包含哪个 class 路径?
try {
Class<?> clazz = Class.forName(((TypeElement) e).getQualifiedName().toString());
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
您试图在问题代码中执行的操作是不可能的,因为注释处理发生在程序完全编译之前。这就是为什么你使用例如TypeElement
个对象而不是 Class
,因为 class 尚未编译。
另一方面,如果您只想检查存在哪些类型的字段,you can use the Element
API for that,例如:
for (Element e : typeElement.getEnclosedElements()) {
if (e.getKind() == ElementKind.FIELD) {
VariableElement field = (VariableElement) e;
//
}
}