如何返回私有内部类的对象
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
的类文件答案 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();}