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ブロックをチェックしたときにnullポインター例外を与えています。また、デバッグモードで試してみると、' 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()、内部クラスをプライベートにして、を返す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

ご覧のとおり、コンストラクターに問題はありません。

于 2012-04-06T00:08:32.520 に答える
0

getObjメソッドのreturnタイプを忘れただけです。

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