2
我试图将Class<? extends SuperClass>
绑定到,但我找不到任何合适的东西。在Guice中绑定泛型与通配符
其实我的绑定需要在Set<Class<? extends SuperClass>>
,所以我测试了正常绑定和多重绑定,但我不能让他们中的任何一个正常工作。我想我正确地遵循了这个问题:Using Guice, how can I inject a bounded-wildcard class?但我不确定,因为我的测试没有通过。
import static java.util.Collections.*;
import static org.junit.Assert.*;
import java.util.Set;
import org.junit.Test;
import com.google.inject.*;
import com.google.inject.multibindings.Multibinder;
public class GuiceWildcardTest {
@Test public void binderShouldBindClassWithWildcard() {
Guice.createInjector(new AbstractModule() {
@Override protected void configure() {
bind(new TypeLiteral<Class<? extends SuperClass>>() {}).toInstance(SubClass.class);
ClassHolder holder = new ClassHolder();
requestInjection(holder);
assertEquals(SubClass.class, holder.type);
}
});
}
@Test public void multibinderShouldBindSetOfClassesWithWildcard() {
Guice.createInjector(new AbstractModule() {
@Override protected void configure() {
Multibinder.newSetBinder(binder(), new TypeLiteral<Class<? extends SuperClass>>() {}).addBinding().toInstance(SubClass.class);
SetHolder holder = new SetHolder();
requestInjection(holder);
assertEquals(singleton(SubClass.class), holder.types);
}
});
}
static class SuperClass {}
static class SubClass extends SuperClass {}
static class ClassHolder {
@Inject Class<? extends SuperClass> type;
}
static class SetHolder {
@Inject Set<Class<? extends SuperClass>> types;
}
}
我不_think_你的意思'TypeLiteral <类<?扩展超类>>',而是'TypeLiteral <?扩展超类>'。 – 2012-07-31 21:19:12
我不知道:我想要一组类,就像我的示例的SetHolder类中定义的那样。我不想要一组实例。 – 2012-07-31 21:50:12
好的,我明白了。如果我完全等待注射器被创建,那没关系。但是,如果我'requestInjection(a)'我的对象并直接检查注入者,那么它会失败。 – 2012-08-01 10:08:52