我正在编写一个使用 Guice 作为其所有 DI 的 API,并希望对 API 开发人员隐藏所有 Guice“东西”。我有以下内容:
public class MyAppModule extends AbstractModule {
@Override
public void configure(Binder binder) {
// Omitted for brevity...
// For instance, binds interface type Animal to impl type Dog, etc.
}
}
public class MyInjector {
public abstract<?> inject(Class<?> clazz) {
MyAppModule module = new MyAppModule();
Injector injector = Guice.createInjector(module);
return injector.getInstance(clazz);
}
}
// So that API developers can just use Animal references and Guice will
// automatically inject instances of Dog
MyInjector injector = new MyInjector();
Animal animal = injector.inject(Animal.class); // <-- Guice returns a Dog instance
问题出在我的MyInjector#inject(Class<?>)
方法上。按原样编写,我收到编译器错误:
Multiple markers at this line
- Return type for the method is missing
- Syntax error on token "?", invalid TypeParameter
根据Guice 文档,Injector#getInstance
返回一个abstract<T>
. 如果可能的话,我想避免泛型以及显式类型转换,以使我的 API 开发人员更简单。我在这里有什么选择吗?如果是这样,它们是什么?如果不是,为什么?提前致谢。