を にバインドしようとしていますが、適切なClass<? extends SuperClass>
ものSubClass.class
が見つかりません。
実際、バインディングは にある必要があるSet<Class<? extends SuperClass>>
ため、通常のバインディングとマルチバインディングの両方をテストしましたが、いずれも適切に動作させることができません。私はこの質問に正しく従ったと思います: Guice を使用して、境界付きワイルドカード クラスを挿入するにはどうすればよいですか? しかし、私のテストは合格していないので、私にはよくわかりません。
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;
}
}