class SaveAction extends AbstractAction {        public SaveAction(String actionName) {
            super(actionName);
        }        public void actionPerformed(ActionEvent e) {
            try {
                this.getClass().newInstance();
                System.out.println("Fuck!!!");
//            SaveAsAction ss =new SaveAsAction();
            } catch (InstantiationException ex) {
                Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
//            SaveAsAction ss =new SaveAsAction();
        }
    }
2008-3-10 15:15:54 main.MainFrame$SaveAction actionPerformed
严重: null
java.lang.InstantiationException: main.MainFrame$SaveAction
        at java.lang.Class.newInstance0(Class.java:340)内部类是不是不能被反射出来,该怎么做呢? this.getClass().newInstance();

解决方案 »

  1.   

    未试过. 内部类应该定义为public,应该是可以被反射的
      

  2.   

     this.getClass().newInstance(); 你这样必须要有piblic的默认构造函数
      

  3.   

    都用上这么高档的东西拉?
    学习ING
      

  4.   

    应该可以吧。private定义的方法和属性都可以发射内部类我想也可以。在精通SPRING2.0里我记得讲过!
      

  5.   

    不行,我试了
    public class Outer{
        public class SaveAction extends AbstractAction {        public SaveAction(){
               super(); 
            }
            public SaveAction(String actionName) {
                super(actionName);
            }        public void actionPerformed(ActionEvent e) {
                try {                System.out.println(e.getActionCommand());
                    SaveAction sa = getClass().newInstance();
                 } catch (InstantiationException ex) {
                    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
             }
        }
    还是抛异常,不管是是否定义为public....
    2008-3-10 19:41:41 main.MainFrame$SaveAction actionPerformed
    严重: null
    java.lang.InstantiationException: main.MainFrame$SaveAction另外使用Class.forName("内部类名")这样也不行。它会说找不到这个类,因为内部类的方式是Outer$Inner。
      

  6.   

    你该这么写
    public class InnerTest { public class Inner {
    public void say() {
    System.out.println("inner");
    }
    }

    }public class Test01 {
    public static void main(String[] args) {
    try {
    Class<Inner> in = Inner.class;
    Inner it = (Inner) in.getConstructors()[0].newInstance(new InnerTest());
    it.say();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  7.   

    九楼所说的方法,为什么我的不能导入内部类Inner呢?  求!!!