Java批注获取其字段的值

时间:2018-08-18 01:30:08

标签: java annotations

是否可以将参数的值传递给注释?

例如:

@MyAnnot
final List<String> list;

我希望将list的内容传递给MyAnnot

1 个答案:

答案 0 :(得分:0)

使用标准Java无法实现您的要求。

注释是类的一种形式,其实例可以附加到程序的各种元素上;例如类,方法,字段,参数等。对于具有保留策略RUNTIME的注释,应用程序使用反射来检索与ClassMethodField等相关的注释。

问题在于注释与(有效)语法元素相关联,而不是与那些元素的实例相关联。例如:

    public class Thing {
        @MyAnnot
        final List<String> list;
    }

我们可以使用反射来找到Class的{​​{1}}对象和Thing的{​​{1}}对象。从那里,我们可以获得与Field关联的list注释。

但是,@MyAnnotFieldClass实例与Field类的任何特定实例都不相关。如果您想通过@MyAnnot注释获得Thing的值(以某种方式),则需要(以某种方式)知道您在谈论哪个实例。

对该问题的另一种解释是,希望(以某种方式)您的应用程序每次分配给list对象的@MyAnnot变量时,分配的值也将传递给Thing批注。 JVM不会这样做。这不是注释的标准行为。从理论上讲,可以实现这种功能(例如,用一些英勇的字节码重写),但我不知道有任何示例。