1

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

例如,如果我有javax.persistence.Entity并且我尝试过,setAnnotation(javax.persistence.Entity.class)我会收到一条错误消息,说Class<Entity>不适用于这些论点。但是,这是一个具有@interface属性的类;这显然是一个注释。我做错了什么,如何正确发送值?

这样做的原因是我要从 Spring XML configuration 到 class @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);

有效,但有更好的方法吗?

4

1 回答 1

2

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

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

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

还要注意Collection参数类型,因为Collections.singleton()返回 a Set,而不是 a List。也许您打算使用 aCollections.singletonList()代替?

于 2012-05-10T11:33:26.973 回答