如何返回私有内部类对象java的对象

时间:2012-04-05 23:50:23

标签: java inner-classes

如何返回私有内部类的对象

public class MainClass{
   public InnerClass getObj(){
       return this.new InnerClass()
   }
   private class InnerClass{
       InnerClass(){
       }
   }
}
-------------
MainClass mc = new MainClass();
mc.getObj(); // assume I am not holding it anywhere.

当我使用try-catch块检查时,上面的代码给出了空指针异常。 此外,在调试模式下尝试时,它会显示“ClassNotFoundException

但我可以看到生成为MainClass $ InnerClass.class

的类文件

4 个答案:

答案 0 :(得分:2)

嗯,我没有同样的问题。这是我修改后的代码版本:

class MainClass {
    public static void main( String[] args ) {
        MainClass mc = new MainClass();
        InnerClass ic = mc.getObj();
        System.out.println( ic );
    }

    public InnerClass getObj() {
        return this.new InnerClass();
    }

    private class InnerClass {
        InnerClass() {}
    }
}

此代码的结果是:

MainClass$InnerClass@64c3c749

答案 1 :(得分:1)

正如其他人已经指出的那样,您需要做的就是修复方法的返回类型。

但是,您应该知道,因为您在公共方法中导出非公共类型,所以会收到警告。

答案 2 :(得分:1)

由于您的getObj()是公开的,因此您应该将内部类保密并返回Object,或者将其公开并返回InnerClass,具体取决于您的需求。

以下代码返回示例中的对象:

public class MainClass {
        private class InnerClass {
                InnerClass() { System.out.println("InnerClass"); }
        }

        public Object getObj(){
                return new InnerClass();
        }

        public static void main (String[] argc) {
                MainClass a = new MainClass();
                System.out.println(a.getObj());
        }
}

打印出来:

bash-4.2$ java MainClass
InnerClass
MainClass$InnerClass@53c059f6

正如您所看到的,构造函数没有问题。

答案 3 :(得分:0)

您只是忘记了getObj方法的返回类型。

 public InnerClass getObj(){return new InnerClass();}