通过使用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; }