反射 getAnnotations() 返回 null

2022-09-04 22:09:48

可搜索.java

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

Obj.java

public class Obj {
    @Searchable
    String myField;
}

void main(String[] args)

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

我希望包含我的.虽然它是.根据文档,此方法:annotations@Searchablenull

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

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

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


答案 1

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

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;
}

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

@nl.jworks.stackoverflow.Searchable()

您可以尝试在 IDE 中运行上述类吗?我用IntelliJ,openjdk-6尝试了它。


答案 2

您的代码是正确的。问题出在其他地方。我刚刚复制并运行了您的代码,它的工作原理。

您可能在代码中导入了错误的类,您可能希望先检查该类。Obj