我使用Java Reflection来初始化不同类型的对象。所有这些对象都以相同的方式构造(也就是说,我传入相同的值来构造它们)。
因此,我的注入器检查每个字段,并执行一个长if/else语句,如下所示:if (Foo.class.isAssignableFrom(field.getType())
return new Foo(values);
else if (Bar.class.isAssignableFrom(field.getType())
return new Bar(values);
else if...//Continue over and over
我不能定义一个要求类具有工厂的接口,因为工厂本质上是静态的。扩展抽象类也是如此。
是否有某种方法可以删除上面的if/else语句,以便我的注入类不知道需要注入的类(除了它可以用values
构造的事实之外)?
按要求:
你看过Spring的源代码吗?这个问题已经被一个现有的开源项目解决了,你可以直接分叉代码并重用它。
使用(未经测试):
private <T> T newInstance(Class<T> type){
Constructor<T> constructor = type.getConstructor(valueTypes);
return constructor.newInstance(values)
}
然后调用:
Object obj = newInstance(field.getType());