我输出19行的length 是有1的

解决方案 »

  1.   

    试试Constructor con = c.getDeclaredConstructors()[0];
      

  2.   


                Constructor con = c.getDeclaredConstructor(new Class[]{Outer.class});
                System.out.println(c.getDeclaredConstructors().length);
                con.setAccessible(true);
                l.newInstance();
                con.newInstance(new Outer());
      

  3.   

    这个我试过可以获取 不过点他的newInstance 就会报错了 
      

  4.   

    我能不能实例化私有的内部类呢
    应该不能吧,不过在Outer类里面应该可以。这个我也不太清楚。
      

  5.   

    当然可以实例化内部类对象,只是内部类有点特殊要实例化成员内部类必须先实例化其外部类对象.
    内部类的构造方法看似无参的,其实默认是含有外部类对象的有参构造函数.public class Test {
    public static void main(String[] args) throws Exception{
    Class<?> cl=Class.forName("Outer");
    Constructor<?> con=cl.getDeclaredConstructor();
    con.setAccessible(true);
    //在实例化内部类对象之前先实例化外部类对象
    Object outer=con.newInstance();
    //内部类对象的构造方法看似无参其实是有含有外部类对象的有参构造函数
    cl=Class.forName("Outer$Inter");
    //这才是他真正的构造函数
    con=cl.getDeclaredConstructor(Outer.class);
    con.setAccessible(true);
    //既然含有外部类对象的构造函数自然在构造的时候要把外部类的对象传入
    Object inter=con.newInstance(outer);
    System.out.println(inter);
    }
    }
    class Outer {
        
        private class Inter{
             
        }
    }
      

  6.   

    我能不能实例化私有的内部类呢
    应该不能吧,不过在Outer类里面应该可以。这个我也不太清楚。谢谢各位
      

  7.   


    无聊的时候又发现了一个问题 如果私有内部类里面又有一个私有内部类 那
    con = cl.getDeclaredConstructor(Outer.class);
    后面那个参数不能找到内部类的class 
    应该怎么处理
    谢谢
      

  8.   

    如果还有私有内部类一样的实例化当前这个私有内部类的持有外部类(也就是这个内部类成员的所属外部类也就是这里的Outer.Inter),依此类推,只要记住成员内部类的特征就是相当于成员变量或成员方法,那么就和成员变量和方法一样的,要想得到成员变量或方法总得先得到他的持有对象,所以内部类一样的道理,要想实例化它就要得到他的持有对象.
    public class Test {
    public static void main(String[] args) throws Exception {
    Class<?> cl = Class.forName("Outer");
    Constructor<?> con = cl.getDeclaredConstructor();
    con.setAccessible(true);
    // 在实例化内部类对象之前先实例化外部类对象
    Object outer = con.newInstance();
    // 内部类对象的构造方法看似无参其实是有含有外部类对象的有参构造函数
    cl = Class.forName("Outer$Inter");
    // 这才是他真正的构造函数
    con = cl.getDeclaredConstructor(Outer.class);
    con.setAccessible(true);
    // 既然含有外部类对象的构造函数自然在构造的时候要把外部类的对象传入
    Object inter = con.newInstance(outer);
    //如果还有私有内部类一样的实例化当前这个私有内部类的持有外部类(也就是这个内部类成员的所属外部类也就是这里的Outer.Inter)
    Class<?> cll=Class.forName("Outer$Inter$InterInter");
    //那么此时的默认构造函数就是持有Outer.Inter类对象的
    con=cll.getDeclaredConstructor(cl);
    con.setAccessible(true);
    //要实例他就要有Outer.Inter对象
    Object InterInter=con.newInstance(inter);
    System.out.println(InterInter);
    }
    }class Outer { private class Inter {
    private class InterInter{}
    }
    }