私はすべての DI に Guice を使用する 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 docsによると、 をInjector#getInstance
返しますabstract<T>
。可能であれば、API 開発者にとって物事を単純にするために、ジェネリックや明示的な型キャストを避けたいと考えています。ここにオプションはありますか?もしそうなら、それらは何ですか? そうでない場合、なぜですか?前もって感謝します。