1

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

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

4 回答 4

3

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

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
于 2012-04-06T00:02:26.557 回答
1

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

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

于 2012-04-06T00:06:11.490 回答
1

由于您getObj()是公开的,因此您应该保持内部类私有并返回 an Object,或者将其公开并返回 an 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

如您所见,构造函数没有问题。

于 2012-04-06T00:08:32.520 回答
0

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

 public InnerClass getObj(){return new InnerClass();}
于 2012-04-06T00:01:30.663 回答