nee*_*men 2 java reflection annotations
我有注释
public @interface Equals {
String name() default "unknown";
}
Run Code Online (Sandbox Code Playgroud)
以及字段被 Equals 注解的类
public class TransportSearch {
@Equals(name="vin")
public String vin = null;
}
Run Code Online (Sandbox Code Playgroud)
我在另一个类中有一个方法
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;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在这个方法中field.getAnnotation(Equals.class)
返回 null,我不明白为什么?你能帮助我吗?
您必须将注释的RetentionPolicyRetentionPolicy.RUNTIME
设置为:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Equals {
String name() default "unknown";
}
Run Code Online (Sandbox Code Playgroud)
默认值为RetentionPolicy
,RetentionPolicy.CLASS
这意味着注释不需要在运行时可用。
归档时间: |
|
查看次数: |
2271 次 |
最近记录: |