将服务类与泛型绑定



我有一个通用接口

@FunctionalInterface
public interface GenericInterface<T> {
Optional<T> doSmth(long Id);
}

我有两个实现类,例如GenericInterfaceImpl和GenericInteraceImpl,它们都在一个方法中使用自己的类作为泛型

public class GenericInterfaceImpl
implements GenericInterface<OwnClass> {
}
public class GenericInterfaceImplImpl
implements GenericInterface<OwnClass2> {
}

我还有另外两个类,它们应该使用上面服务的依赖关系

public class Class1 {
private final GenericInterface<OwnClass> gen;
@Inject
public Class1(GenericInterface<OwnClass> gen) {
this.gen = gen;
}
}
public class Class2 {
private final GenericInterface<OwnClass2> gen2;
@Inject
public Class2(GenericInterface<OwnClass2> gen2) {
this.gen2 = gen2;
}
}

ServiceBinder类

bind(GenericInterfaceImpl.class).to(GenericInterface.class);
bind(GenericInterfaceImplImpl.class).to(GenericInterface.class);

在运行应用程序后,假设我已经注册了ServiceBinder,我得到了这个错误

Caused by: org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=GenericInterface,parent=Class1 etc.)

如何正确绑定?

经过8个小时的搜索,我找到了解决方案

bind(GenericInterfaceImpl.class).to(new TypeLiteral<GenericInterface<OwnClass>>() {});
bind(GenericInterfaceImplImpl.class).to(new TypeLiteral<GenericInterface<OwnClass2>>(){});

最新更新