java - 无法访问Java中字段的注释

标签 java reflection annotations

我有注释

public @interface Equals {
String name() default "unknown";
}

以及字段被Equals注释的类

public class TransportSearch {
@Equals(name="vin")
public String vin = null;
}

我在另一个类中有一个方法

public String (TransportSearch transportSearch){
    Field[] fields = transportSearch.getClass().getDeclaredFields();

    String vin = null;

    for(Field field : fields){
        try {
            Equals annot = field.getAnnotation(Equals.class);

            if(annot!=null && annot.name().equals("vin")){
                try {
                    vin = (String) field.get(transportSearch);
                } catch (IllegalAccessException e){
                    e.printStackTrace();
                }
            }

        } catch(NullPointerException e) {
            e.printStackTrace();
        }
    }
    return vin;
}

不幸的是,在这个方法中 field.getAnnotation(Equals.class) 返回 null,我不明白为什么? 你能帮我吗?

最佳答案

您必须设置 RetentionPolicy将注释添加到 RetentionPolicy.RUNTIME:

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Equals {
    String name() default "unknown";
}

默认的RetentionPolicyRetentionPolicy.CLASS,这意味着注释不需要在运行时可用。

关于java - 无法访问Java中字段的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684741/

相关文章:

java - 使用 docx4j 进行 docx 比较时出现 OutOfMemoryError

java - 如何在没有应用程序上下文的情况下使用 spring-security 过滤器?

c# - 在 C# 4.0 中获取对象的实例名称没有对象类型名称

java - Java类中的默认字段修饰符是什么?

java - 是否可以在java中读取注释的值?

iOS Map Kit Locations 从数据库读取

java - schemagen gradle 构建错误

java - 如何挂接到自动生成的 Java 方法?

c# - ModelBinder 验证在使用反射的 getter 上中断

Spring 3 DI 使用通用 DAO 接口(interface)