1

假设有这样的方法:

void annotate(Annotation annotation);

Annotation如果我只有Annotation'sClass可用,java 中将对象传递给此方法的惯用方式是什么?

public @interface SomeAnnotation {

}

SomeAnnotation.getClass();
4

1 回答 1

1

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

public @interface SomeAnnotation{}

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

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

public @interface SomeAnnotation{
    int value();
}



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

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

@SomeAnnotation(5)
public class MyClass {
}
于 2013-05-27T08:38:41.980 回答