如何为参数为Class <! - 的方法提供有效类?扩展注释 - >?

时间:2012-05-10 10:56:16

标签: java spring configuration annotations

我有一种情况,我需要以编程方式设置参数为Class<? extends Annotation>的东西,但我无法弄清楚如何将Annotation类传递给此方法。

例如,如果我有javax.persistence.Entity并尝试setAnnotation(javax.persistence.Entity.class),则会收到错误消息,指出Class<Entity>不适用于这些参数。但是,这是一个具有@interface属性的类;这显然是一个注释。我做错了什么,如何适当地发送一个值?

原因是我将从Spring XML配置转到类@Configuration。使用以下命令在xml文件中执行此操作非常简单:

<property name="annotation" value="javax.persistence.Entity" />

但我不知道Spring正在做些什么来做这项工作。

public class Stuff {
    private List<Class<? extends Annotation>> annotations;

    public List<Class<? extends Annotation>> getAnnotations() {
        return annotations;
    }

    public void setAnnotations(List<Class<? extends Annotation>> annotations) {
        this.annotations = annotations;
    }
}

public class StuffTest {


    @Test
    public void test() {

        new Stuff().setAnnotations(Collections.singletonList(javax.persistence.Entity.class));
        // this does not compile
    }
}

编辑:

List list = new ArrayList();
list.add(javax.persistence.Entity.class);
stuff.setAnnotations(list);

有效但有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这是适用于我的API(使用Eclipse和javac编译器):

public void setAnnotations(
  Collection<? extends Class<? extends Annotation>> annotations) {

当然,这意味着你必须改变Stuff本身的一些内部运作......

另请注意Collection参数类型,因为Collections.singleton()会返回Set,而不是List。也许你的意思是使用Collections.singletonList()代替?