別の内部クラスメソッドから内部クラスインスタンスを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1406525

  •  05-07-2019
  •  | 
  •  

質問

public class Ex7 {
    private int fld;

    private void meth(int val) {
        fld = val;
        System.out.println(" meth() -> fld = " + fld);
    }

    public class Ex7Inner1 {
        void operateOnFld() {
            fld = 12;
        }

        void operateOnMeth() {
            meth(10);
        }

        public void bar() {
            System.out.println(" bar() ");
        }
    }

    class Ex7Inner2 {
        Ex7Inner1 i1 = new Ex7Inner1();
        // how to call i1.bar() ??
        i1.bar();
    }
}
役に立ちましたか?

解決

問題は、関数内で i1.bar()を呼び出す必要があることです。例

class Ex7Inner2 {
    Ex7Inner1 i1 = new Ex7Inner1();  // this is now a field of the Ex7Inner2 class
    public void callBar() {
        i1.bar();                    // this will work
    }
}

将来、あなたが質問にエラーを含めれば、人々はもっと役立つことができるようになるかもしれません。コードを自分の方法でコンパイルしようとすると、次のようなエラーが表示されます

Ex7.java:26: <identifier> expected
  i1.bar();
        ^
1 error

これは、メソッドの外側で(元々持っていたように)できることは変数の宣言だけだからです。そのため、「識別子」が必要でした。 「宣言する変数の名前」を意味していました。もしあなたが言ったなら

String s;

then s が識別子になります。

他のヒント

ここでいくつか間違っています;

  • inner2が呼び出す必要があります 関数内のi1
  • inner1を宣言しなかったため 静的それのインスタンスが必要です Ex7の存在を囲みます。

したがって、次のようなことができます:

public class Ex7 {

    private Ex7Inner1 i1;
    public class Ex7Inner1 {
        public void bar() {
            System.out.println( " bar() " );
        }
    }

    class Ex7Inner2 {
        // how to call i1.bar() ??
        public Ex7Inner2() {
            Ex7.this.i1.bar();
        }
    }
}

Ex7のi1にアクセスするには。

Ex7インスタンスにinner1とinner2が含まれ、inner2内からの参照がinner2->> parentEx7-> gt; inner1である場合。

内部クラスを静的にすると、外部クラスのインスタンスが存在する必要がないと内部クラスが定義しているため、Ex7リファレンスを廃止できます。

しかし、Ex7Inner2クラスにはメソッドはありません。 「i1.bar();」を使用してメソッドを作成します内部で呼び出してコンパイルします

Ex7Inner1 をインスタンス化するには、 Ex7 への参照が必要です。 Ex7Inner2 からの参照は Ex7.this です。

こう言って

Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()

詳細については、 Javaチュートリアルをご覧ください。 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top