1

ローカル クラスのメンバー変数を再初期化していますが、コンパイル エラーが発生しています。ここで何が問題なのですか?これがコンパイルされないのはなぜですか?ありがとう!

これはコンパイルされません

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100; // Error on this line.Syntax error on token ";", , expected

        i=200;
    }       
}

}   

これはうまくコンパイルされます

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100;
        //i=200;
    }       
}}
4

3 に答える 3

2

これは実際にはローカル クラスの問題ではありません。クラスの「最上位」に割り当てステートメントを配置することはできません。

割り当てステートメントは、メソッド、コンストラクター、静的初期化子、またはインスタンス初期化子に入れる必要があります。

あなたが書いたとき

int i = 100;

実際には、内部クラスのフィールドを宣言していました(ご存じのとおり)。コンストラクター、メソッドなどで行った場合は、このフィールドを再割り当てできます。

補遺

以下では、楽しみのためにインスタンス初期化子を使用しています。

public void someMethod() {
    class LocalClassInner {
        int i = 100;
        {i=200;}
    }           
}

うまくコンパイルされます。http://ideone.com/qjnv3を参照してください。

于 2012-07-07T23:16:43.190 に答える
0

2 番目の割り当てが間違っています。メソッド、コンストラクター、または初期化子の外に通常のコードを配置することはできません。これは匿名クラスとは関係ありません。

于 2012-07-07T23:22:20.160 に答える
0

i の割り当てを変更したい場合は、メソッドに入れる必要があります。

このような:

public class TestSomething {

public void someMethod(){
    class LocalClassInner{
        int i=100;
        private void setI()
        {
            i=200;
        }
    }       
}}
于 2012-07-07T23:22:25.087 に答える