实例化一个带有注释的 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;
        //
    }
}