如何检测类是否可注射

时间:2014-03-13 16:18:01

标签: java reflection

我正在使用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构造的事实?

2 个答案:

答案 0 :(得分:1)

根据要求:

你看过Spring的源代码吗?这是一个已经由现有开源项目解决的问题,您只需分叉代码并重新使用它。

答案 1 :(得分:0)

使用类似(未经测试)的内容:

private <T> T newInstance(Class<T> type){
    Constructor<T> constructor = type.getConstructor(valueTypes);
    return constructor.newInstance(values)
}

然后致电:

Object obj = newInstance(field.getType());

其中valueTypes是值的类型。