我有一种情况,我需要以编程方式设置参数为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);
有效但有更好的方法吗?
答案 0 :(得分:2)
这是适用于我的API(使用Eclipse和javac编译器):
public void setAnnotations(
Collection<? extends Class<? extends Annotation>> annotations) {
当然,这意味着你必须改变Stuff
本身的一些内部运作......
另请注意Collection
参数类型,因为Collections.singleton()
会返回Set
,而不是List
。也许你的意思是使用Collections.singletonList()
代替?