如果只有Class <annotation>可用,则如何传递Annotation对象?</annotation>

时间:2013-05-27 08:21:24

标签: java annotations metaprogramming

假设有这样的方法:

void annotate(Annotation annotation);

如果我只有Annotation的{​​{1}}可用,那么java将Annotation对象传递给此方法的惯用方法是什么?

Class

1 个答案:

答案 0 :(得分:1)

正如您已经提到的,注释只是一种特殊类型的界面:

public @interface SomeAnnotation{}

通常,您实际上需要通常从带注释的元素获得的注释的“实例”,例如obj.getClass().getAnnotation(SomeAnnotation.class)。这将返回实现接口SomeAnnotation的动态代理,因此annotaiton的所有属性实际上都是返回当前值的方法。

如果出于某种原因想要模拟此功能,您可以通过自己创建动态代理或甚至“实现”注释来轻松完成此操作:

public @interface SomeAnnotation{
    int value();
}



void annotate(new SomeAnnotation() {
    int value() {
         return 5;
    }
}

匿名内部类创建注释的实例,如下所示:

@SomeAnnotation(5)
public class MyClass {
}