我有以下代码:
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}
此失败测试:
@MyAnnotation
private Object obj = new Object();
@Test
public void test() throws Exception {
assertEquals(1, obj.getClass().getAnnotations().length);
}
导致:
java.lang.AssertionError:
Expected :1
Actual :0
答案 0 :(得分:2)
您已将注释添加到班级中的Field
而不是Object
班级。尝试
Field field = getClass().getDeclaredField("obj");
MyAnnotation ma = field.getAnnotation(MyAnnotation.class);
assertNotNull(ma);
assertEquals(1, field.getAnnotations().length);
答案 1 :(得分:1)
请看How to get annotations of a member variable?。
obj.getClass()
在您的案例java.lang.Object
中返回,但没有任何注释。