情况:我需要一些延迟依赖实例化FooClass,所以我Injector作为构造函数参数传递给类.
private final Injector m_injector;
public FooClass(@Named("FooInjector") Injector injector) {
m_injector = injector;
}
Run Code Online (Sandbox Code Playgroud)
但是guice不允许绑定核心类(注入器,模块等).解决办法是什么?
你有什么建议?
我发现最适合我的解决方案 - 在枚举类中保留注入器和模块.好处:
例:
import static ru.package.Modules.*;
public enum Injectors {
FOO_INJECTOR(BarModule.module()),
FOO2_INJECTOR(FOO_INJECTOR.injector(),
Bar2Module.module(), FooModule.module());
private final Injector m_injector;
Injectors (Module... modules) {
m_injector = Guice.createInjector(modules);
}
Injectors (Injector parentInjector, Module... modules) {
m_injector = parentInjector.createChildInjector(modules);
}
public Injector injector() {
return m_injector;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要像Class>那样实例化泛型变量.例如,
Class<? extends List<String>> = ...
Run Code Online (Sandbox Code Playgroud)
变式1:
Class<? extends List<String>> clazz = LinkedList.class;
Run Code Online (Sandbox Code Playgroud)
不工作 - "不兼容的类型".
变式2:
Class<? extends List> clazz = LinkedList.class;
Run Code Online (Sandbox Code Playgroud)
工作,但在这种情况下,List是原始类型 - 不好.
如何实例化这样的变量?