通过使用reflection来获取带有注释的字段列表
我创build我的注释
public @interface MyAnnotation { }
我把它放在我的testing对象的字段中
public class TestObject { @MyAnnotation final private Outlook outlook; @MyAnnotation final private Temperature temperature; ... }
现在我想用MyAnnotation
获取所有字段的列表。
for(Field field : TestObject.class.getDeclaredFields()) { if (field.isAnnotationPresent(MyAnnotation.class)) { //do action } }
但似乎像我的块行动永远不会执行,并且字段没有注释,因为下面的代码返回0。
TestObject.class.getDeclaredField("outlook").getAnnotations().length;
有没有人可以帮助我,告诉我我做错了什么?
您需要将注释标记为在运行时可用。 将以下内容添加到注释代码中。
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }
/** * @return null safe set */ public static Set<Field> findFields(Class<?> classs, Class<? extends Annotation> ann) { Set<Field> set = new HashSet<>(); Class<?> c = classs; while (c != null) { for (Field field : c.getDeclaredFields()) { if (field.isAnnotationPresent(ann)) { set.add(field); } } c = c.getSuperclass(); } return set; }