先贴下主要的代码,我现在的需求是从文件中读出一个类来,然后想动态的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();
}
}

解决方案 »

  1.   

    java反射可以创建带参数的够哦早函数的。
    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);
      

  2.   

    args为传入的参数值的数组,即使有一个参数也需要以数组形式传入
      

  3.   

    package com.test;
    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();
            } 
        }
    }