Class c = Class.forName(
"com.jkang100.hospeak.buss.disposeMobileBuss"); Constructor ctorlist[] = c.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
Object arglist[] = new Object[1];
arglist[0] = new String("101");
Object retobj1 = ct.newInstance(arglist);
}
执行到Object retobj1 = ct.newInstance(arglist);时报IllegalArgumentException异常
请各位指点怎么修改
"com.jkang100.hospeak.buss.disposeMobileBuss"); Constructor ctorlist[] = c.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
Object arglist[] = new Object[1];
arglist[0] = new String("101");
Object retobj1 = ct.newInstance(arglist);
}
执行到Object retobj1 = ct.newInstance(arglist);时报IllegalArgumentException异常
请各位指点怎么修改
如果只有一个构造函数,而且这个构造函数需要的参数是一个String的话,你的程序可以正常运行。
但是一般来说,可能有默认构造函数或者别的什么的,这样你对获得的每个构造函数,调用ct.newInstance(arglist);肯定会出错的。你应该先定义Class[] c={String.getClass()};
然后用public Constructor getDeclaredConstructor(Class[] parameterTypes)得到一个构造函数。
再调用ct.newInstance(arglist);
import java.lang.reflect.*;
public class ClassTest { public static void main(String[] args) {
try
{
Class cl=Class.forName("Point2");
Constructor[] cons=cl.getDeclaredConstructors();
for(int i=0;i<cons.length;i++)
{
System.out.println(cons[i]);
}
Method[] md=cl.getDeclaredMethods();
for(int i=0;i<md.length;i++)
{
System.out.println(md[i]);
}
Class[] param=cons[0].getParameterTypes();
Object[] paramValue=new Object[param.length];
for(int i=0;i<param.length;i++)
{
if(param[i].isPrimitive())
{
paramValue[i]=new Integer(i+3);
}
}
Object o=cons[0].newInstance(paramValue);
md[1].invoke(o,null);
}
catch(Exception e)
{
System.out.println("Error");
}
}
}
class Point2
{
int x,y;
Point2(int x,int y)
{
this.x=x;
this.y =y;
}
public String toString()
{
return "x="+x+"y="+y;
}
public void output()
{
System.out.println(toString());
}
}