据我所知,只有在类上手动定义一个map multibinding作为一个map key时。
@Singleton
public class MyClass {
@Inject
public MyClass() {}
}
@Module
public abstract class MyModule {
@Binds
@IntoMap
@ClassKey(MyClass.class)
public abstract Object bindMyClass(MyClass impl);
}
然后
@Inject
Map<Class<?>, Provider<Object>> providers;
MyClass myClass = (MyClass)providers.get(MyClass.class).get();
可以把钥匙限制在
? extends MyClass
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
@interface FooKey {
Class<? extends Foo> value();
}