2

理解できない Java 内部クラスに問題があります。あなたが持っていると仮定します

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          inner = 3; //or whatever, even outer = 3
     }
}

さて、最後の割り当てを書くと、コンパイルエラーが発生します

Syntax error on token ";", , expected

前線で。

内部を変更できないのはなぜですか?

ありがとうございました!

4

5 に答える 5

6

メソッドの外にステートメントを持つことはできません。1 つの手法は、インスタンス初期化ブロックを使用することです。

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          // instance initializer block:
          {
              inner = 3; //or whatever, even outer = 3
          }
     }
}

または、コンストラクターを定義します。

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; //(or just outer as it is not shadowed)
          Inner() {
              inner = 3; //or whatever, even outer = 3
          }
     }
}
于 2013-07-10T13:35:27.393 に答える
4

メソッドまたはコンストラクターにコードを配置する必要があります。

class Outer
{
     int outer = 0;
     class Inner
     {
          int inner = Outer.this.outer; 
          public Inner() {
               inner = 3; 
          }

          public increment() {
               inner++;
          }
      }
}
于 2013-07-10T13:35:25.373 に答える
3

への割り当てinnerは、クラス内で「緩い」のではなく、メソッドまたはコンストラクター内にある必要があります。

于 2013-07-10T13:35:18.687 に答える
0

inner = 3;Yuo はメソッドの外側で直接初期化することはできません inner = 3; 。メソッドまたはコンストラクターの内側でそれを確認してください。

 public Inner() 
 {
       inner = 3; 
 }
于 2013-07-10T13:37:34.680 に答える
0

You need to include the line:

 inner=3;

in a method in the inner class.

于 2013-07-10T13:36:39.890 に答える