gpt4 book ai didi

java - getAnnotation(Class) 在处理注释时始终返回 null

转载 作者:行者123 更新时间:2023-12-01 10:34:06 25 4
gpt4 key购买 nike

我正在尝试处理注释,我的处理器类扩展了 AbstractProcessor 并且 process 方法如下所示:

KeyAnnotationProcessor.java

    @Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {

// Instanciation du Visitor
final KeyVisitor visitor = new KeyVisitor(processingEnv);

// On boucle sur toutes les Annotations :
for (final TypeElement declaration : annotations) {

// On "visite" chacune des déclarations trouvées :
declaration.accept(visitor,roundEnv);
}

}

如提供的代码所示,我为每个注释使用一个访问者,即访问者的代码:

KeyVisitor.java

public class KeyVisitor extends SimpleElementVisitor6<Void, RoundEnvironment> {

final ProcessingEnvironment env;

public KeyVisitor(final ProcessingEnvironment env) {
this.env = env;
}

@Override
public Void visitType(TypeElement e, RoundEnvironment p) {
Key cle=e.getAnnotation(Key.class);
if(cle!=null){
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE , "OK");
}else{
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR , "ERROR");
}
}

这是我的关键类(class)

Key.java

@Documented
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface Key {
String description();
String filename();
}

这是我尝试处理的示例,它是一个 java 文件:

OracleDirectory.java

@Key(description = "Oracle Directory configuration", filename = "oracle-directory")
public enum OracleDirectoryProperties {

}

问题是KeyvisitorvisitType中的cle始终为null,为什么getAnnotation方法始终为null返回空值?任何帮助将不胜感激。

最佳答案

很确定这是你的问题:

@Retention(RetentionPolicy.SOURCE)

更改为

@Retention(RetentionPolicy.CLASS)

SOURCE 保留策略告诉 Java,“此注释只需要出现在源代码中”——因此,当 javac 解析代码时,它会丢弃该注释。您希望它在注释处理器中可用,因此需要告诉 javac 将信息保留在类本身中。

关于java - getAnnotation(Class) 在处理注释时始终返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com