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异常
请各位指点怎么修改

解决方案 »

  1.   

    参数不对,newInstance有参数吗,我现在没文档,不能查看
      

  2.   

    你用getDeclaredConstructors()获取所有的构造函数。
    如果只有一个构造函数,而且这个构造函数需要的参数是一个String的话,你的程序可以正常运行。
    但是一般来说,可能有默认构造函数或者别的什么的,这样你对获得的每个构造函数,调用ct.newInstance(arglist);肯定会出错的。你应该先定义Class[] c={String.getClass()};
    然后用public Constructor getDeclaredConstructor(Class[] parameterTypes)得到一个构造函数。
    再调用ct.newInstance(arglist);
      

  3.   

    给你个示例:
    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());
        }
       
    }