Can';Java中字段的t-access注释
我有注解Can';Java中字段的t-access注释,java,reflection,annotations,Java,Reflection,Annotations,我有注解 public @interface Equals { String name() default "unknown"; } 和类,其字段由等号注释 public class TransportSearch { @Equals(name="vin") public String vin = null; } 我在另一个类中有一个方法 public String (TransportSearch transportSearch){ Field[] fields = transpo
public @interface Equals {
String name() default "unknown";
}
和类,其字段由等号注释
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.RUNTIME
:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Equals {
String name() default "unknown";
}
默认的RetentionPolicy
是RetentionPolicy.CLASS
,这意味着注释不需要在运行时可用。如果使用kotlin:
class TransportSearch {
@field:Equals(name = "vin")
var vin:String? = null
}
更正很少:默认的RetentinPolicy是RetentionPolicy.CLASS。但这仍然是一个正确的答案。@SeelenVirtuse感谢您的更正-我编辑了我的答案以反映这一点。