反射getAnnotations()返回null



可搜索.java

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

对象java

public class Obj {
    @Searchable
    String myField;
}

void main(String[]args(

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

我希望annotations包含我的@Searchable。虽然是CCD_ 3。根据文件,这种方法:

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

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

我在这里做错了什么,更重要的是,我如何才能获得Annotation

我刚刚为您测试了这个,它很有效:

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。

您的代码是正确的。问题出在别的地方。我刚刚复制并运行了你的代码,它很有效。

您可能在代码中导入了错误的Obj类,您可能需要先检查一下。

在我的情况下,我忘记添加

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)

对于方法,所以最后它应该看起来像:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}

在我的例子中,错误出现在我自己的注释中。我修复了几件事,结果是这样的:

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface MyAnnotation{
}

它现在工作

相关内容

  • 没有找到相关文章

最新更新