Я новичок в guice, и, используя guice 4.1, я хочу создать следующий класс:
public class GuiceMain<T> implements IGuiceMain<T> {
private ObjectWrapperFactory<T> factory;
@Inject
public GuiceMain(ObjectWrapperFactory<T> factory) {
this.factory = factory;
}
public void process(T t) {
ObjectWrapper wrapper = factory.create(t);
}
}
У меня нет строгих требований к его созданию, но я пришел к решению создать интерфейсGuiceMainFactory
public interface GuiceMainFactory {
<T> GuiceMain<T> create();
}
, поэтому мой код клиента будет выглядеть следующим образом:
Injector injector = Guice.createInjector(new Configuration());
GuiceMain<File> instance = injector.getInstance(GuiceMainFactory.class).create();
File f = new File("text.txt");
instance.process(f);
, и в моем классе конфигурации guice я пишу
install(new FactoryModuleBuilder().implement(IGuiceMain.class, GuiceMain.class).build(GuiceMainFactory.class))
Но я получаю ошибку: 1) com.guice.GuiceMainFactory нельзя использовать в качестве ключа;Он не указан полностью. Поэтому я решил написать реализацию GuiceMainFactory
public class GuiceMainFactoryImpl implements GuiceMainFactory {
private ObjectWrapperFactory objectWrapperFactory;
@Inject
public GuiceMainFactoryImpl(ObjectWrapperFactory objectWrapperFactory) {
this.objectWrapperFactory = objectWrapperFactory;
}
@Override
public <T> GuiceMain<T> create() {
return new GuiceMain<T>(objectWrapperFactory);
}
}
, но в этом случае в строке вернуть новый GuiceMain (objectWrapperFactory); Я получаю непроверенное назначение предупреждение, потому что я не могу указать универсальный тип objectWrapperFactory
Я думаю, что я все усложнил, но я не знаю, как с этим справиться