日期:2014-05-20  浏览次数:20629 次

反射时,如何使用可变参数的类对象作为参数来获取相应构造器
某个类的方法代码如下(为节省空间,我在这贴的省略了异常处理)
public Showable getInstance(String key,Object...args) {
p.loadFromXML(new FileInputStream("properties.xml"));
Class<Showable> c =(Class<Showable>) Class.forName(p.getProperty(key));
Class[] toa= new Class[args.length];
for(int i=0;i<args.length;i++)
{
toa[i]=args[i].getClass();
}
Constructor<Showable> show = c.getConstructor(args.getClass());
return show.newInstance(args);
}
我要从一个XML配置文件里,通过某一个兼职,取出某个类的全路径,用这个全路径去实例化一个对象,但构造函数是不唯一的,所有我使用了可变参数,但麻烦来了,倒数第二句,是根据这可变参数里每一个参数的Class对象作为参数,取出我要调用的相应构造方法,如何实现呢?
我试过以下方法:
1,如代码所示,直接填args.getClass,结果不行
2,用数组toa作为参数,结果也不行
我该怎么办啊

------解决方案--------------------
这还真不能怪java
首先java类库可以做到,但是如果假设有
Person(String,Integer)
Person(String,int)
该找哪个好?这就涉及一个查找顺序的问题了,会给编程人员带来困惑以及一些微妙的错误

探讨

引用:
那就必须与构造方法的参数类型一致了
Person(String ,int)就要是String.class和int.class
Worker(String,int ,String)就要是String.class,int.class和String.class

如果这些类只有一个多参的构造方法或者有多个多参的构造方法但你可以区别,可以尝试Class#getCons……