反射getAnnotations()返回null

Men*_*nno 12 java reflection

Searchable.java

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Searchable { }
Run Code Online (Sandbox Code Playgroud)

Obj.java

public class Obj {
    @Searchable
    String myField;
}
Run Code Online (Sandbox Code Playgroud)

void main(String [] args)

Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();
Run Code Online (Sandbox Code Playgroud)

我希望annotations能包含我的@Searchable.虽然是null.根据文档,这种方法:

返回此元素上的所有注释.(如果此元素没有注释,则返回长度为零的数组.)此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响.

这更奇怪(对我来说),因为它返回null而不是Annotation[0].

我在这里做错了什么,更重要的是,我怎么能得到我的Annotation

Eri*_*agt 7

我刚刚为你测试了这个,它只是起作用:

public class StackOverflowTest {

    @Test
    public void testName() throws Exception {

        Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();

        System.out.println(annotations[0]);
    }
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Searchable {

}

class Obj {

    @Searchable
    String myField;
}
Run Code Online (Sandbox Code Playgroud)

我运行它,它产生以下输出:

@nl.jworks.stackoverflow.Searchable()
Run Code Online (Sandbox Code Playgroud)

你能尝试在IDE中运行上面的类吗?我用IntelliJ,openjdk-6试了一下.