2

我有以下课程:

public interface Factory<T extends MyParentClass> {
    public T create(String parameter);
}

public class FactoryImpl1 implements Factory<MyChildClass1> {
    public MyChildClass1 create(String parameter){
    ...
    }
}

public class FactoryImpl2 implements Factory<MyChildClass2> {
    public MyChildClass2 create(String parameter){
    ...
    }
}

public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        MapBinder<String, Factory<MyParentClass>> factoryMap = MapBinder.newMapBinder(binder(), new TypeLiteral<String>() {}, new TypeLiteral<Factory<MyParentClass>>(){});
        factoryMap.addBinding("myKey1").to(FactoryImpl1.class);
        factoryMap.addBinding("myKey2").to(FactoryImpl2.class);
    }
}

我的模块中的语法不正确,我不知道如何配置它。

事实上,我想在我的工厂界面中为每个可能的工厂创建一个工厂

在此先感谢您的帮助。

4

1 回答 1

1

Factory<MyParentClass>不是 的超类型Factory<MyChildClass1>,您需要指定通配符泛型(在这种情况下绑定或未绑定并不重要,因为您已在工厂定义中绑定它)。

尝试

MapBinder<String, Factory<?>> factoryMap = MapBinder.newMapBinder(binder(), new TypeLiteral<String>(){}, new TypeLiteral<Factory<?>>(){});

在此处检查泛型之间的超类型关系。

于 2011-11-26T23:23:30.730 回答