先贴下主要的代码,我现在的需求是从文件中读出一个类来,然后想动态的new出tank类的实例来,并且tank类的构造方法是带有参数的,但是下面的c.newInstance();只能调用无参的构造方法,通过c.getMethod()方法拿到的都是普通的方法,能不能有别的方法能够调用带参数的构造方法。static {
String tankName = PropertyMgr.getInstance().getProperty("tank.init.class");
try {
// tank = (Tank)Class.forName(tankName).newInstance();
Class c = Class.forName(tankName);
c.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String tankName = PropertyMgr.getInstance().getProperty("tank.init.class");
try {
// tank = (Tank)Class.forName(tankName).newInstance();
Class c = Class.forName(tankName);
c.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
cons.newInstance(args);
import java.lang.reflect.Constructor;
public class TestObject {
public TestObject()
{
System.out.println("234");
}
public TestObject(int k)
{
System.out.println(k);
} public TestObject(int k,String mi)
{
System.out.println("k:"+ k + " mi: " + mi );
}
public TestObject(int k, String mi, Integer integ)
{
System.out.println("k:"+ k + " mi: " + mi + " integ: " + integ);
}
public static void main(String[] args)
{
try
{
Class tt = Class.forName("com.test.TestObject");
Class types[] = {int.class};
Constructor c = tt.getConstructor(types);
Object input[] = {new Integer(9999999)};
c.newInstance(input);
Class tt2 = Class.forName("com.test.TestObject");
Object o = tt2.newInstance();
Class tt3 = Class.forName("com.test.TestObject");
Class types3[] = {int.class,String.class};
Constructor c3 = tt3.getConstructor(types3);
Object input3[] = {new Integer(9999999), "1234"};
c3.newInstance(input3);
Class tt4 = Class.forName("com.test.TestObject");
Class types4[] = {int.class,String.class, Integer.class};
Constructor c4 = tt4.getConstructor(types4);
Object input4[] = {new Integer(9999999), "1234" , new Integer(5555)};
c4.newInstance(input4);
} catch (Exception e)
{
e.printStackTrace();
}
}
}