我认为你必须使用 Guice 的 assisted inject 扩展名。
基本上,您按原样定义您的ClassTest,但将“可变”依赖项标记为@Assisted:
@Inject
public ClassTest(ITestInterface testInterface, @Assisted Class<?> clazz){
...
}
然后为ClassTest 对象创建一个工厂接口,该接口将接受Class 参数并返回ClassTests:
public interface ClassTestFactory {
ClassTest create(Class<?> clazz);
}
然后你安装特殊类型的模块,它会为你创建工厂:
// Inside your module
install(new FactoryModuleBuilder().build(ClassTestFactory.class));
然后,无论您需要ClassTest 实例,您都应该注入ClassTestFactory 接口:
@Inject
YourLogicClass(ClassTestFactory ctFactory) {
this.ctFactory = ctFactory;
}
最后你用它为你想要的每个类对象创建ClassTests:
ClassTest ct1 = ctFactory.create(SomeClass.class);
ClassTest ct2 = ctFactory.create(AnotherClass.class);
但如果我是你,我真的会重新考虑整个类的架构以避免此类事情的需要。