Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 直接获取字段的注释_Java_Reflection_Annotations - Fatal编程技术网

Java 直接获取字段的注释

Java 直接获取字段的注释,java,reflection,annotations,Java,Reflection,Annotations,在一个类中,我有几个字段是匿名类。其中一些有注释。例如: public class MainClass { @Annotation public static Test t = new Test() {...} Interface Test {...} } 我知道我可以通过MainClass.class.getField(“t”).getAnnotations()查看t的注释,但是有没有办法通过引用t来获取t的注释?例如,如果我有一组测试,我可以通过迭代来查看它们

在一个类中,我有几个字段是匿名类。其中一些有注释。例如:

public class MainClass {

    @Annotation
    public static Test t = new Test() {...}

    Interface Test {...}

}
我知道我可以通过MainClass.class.getField(“t”).getAnnotations()查看t的注释,但是有没有办法通过引用t来获取t的注释?例如,如果我有一组测试,我可以通过迭代来查看它们的注释吗

Collection<Test> c;
...
// MainClass.t is in collection c
...

for (Test test : c) {

    // get annotation of test

}
集合c;
...
//MainClass.t在集合c中
...
用于(测试:c){
//获取测试的注释
}

我猜这是不可能的,如果不可能的话,什么是接近我要做的事情的最佳方式?

引用只指向一个对象,而对象没有任何注释。字段(方法、类、参数等)不起作用。所以,不,这是不可能的

接近我要做的事情的最好方式是什么

没有

public void someMethod() {
    Test test = MainClass.t;
    // some more
}
MainClass.t
是一个
字段
。局部变量test就是局部变量

请注意,您可以注释局部变量

public void someMethod() {
    @SomeAnnotation
    Test test;
}

@Target(value = { ElementType.LOCAL_VARIABLE })
public @interface SomeAnnotation {

}

但无法检索该注释。它主要由IDE使用,例如
@SuppressWarnings

我想
Test
是一个接口,您需要实现类的注释

for (Test test : c) {

    test.getClass().getField( "xx" ).getAnnotations()

}

当然,您可以使用
test.getClass().getFiels()
获取所有字段,然后从中获取注释。取决于你真正想做什么。

匿名类的字段有没有办法看到自己的注释?类似于publicstatictest t=newtest(){…this.getClass().doSomething}?@user1940121如果您的匿名类有一个实例字段,那么您可以像平常一样访问它。在您的示例中,
t.getClass().getField(…)
。该字段将只属于匿名类(实例)。