2014-03-13 54 views
0

我正在使用Java反射初始化不同类型的对象。所有这些对象都以相同的方式构造(即,我传入相同的值来构造它们)。如何检测类是否可注入

因此,我的喷油器通过查找每个字段,并做了很长的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

+0

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

+0

是的,我实际上使用Spring。我从来没有想过在这种情况下使用它。这实际上是我正在寻找的。发表一个答案,我会接受它@mttdbrd –

+0

太棒了!谢谢。 – mttdbrd

回答

1

根据要求:

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

0

使用类似构造的事实类的想法(未测试):

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

然后调用:

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

其中值类型是类型的值的