我正在编写一个使用Guice进行所有依赖注入的API,并希望将所有Guice相关内容隐藏不让API开发人员看到。我有以下代码:
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开发人员更容易理解。我有什么选择吗?如果有,是什么?如果没有,为什么?谢谢。