匿名类成员无法重新初始化

时间:2012-07-07 23:14:39

标签: java anonymous-class

我正在重新初始化本地类的成员变量,并且收到编译错误。这有什么不对?为什么这不会编译?谢谢!

这不会编译

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;
    }       
}}

3 个答案:

答案 0 :(得分:2)

这不是一个真正的本地课程问题。你不能把赋值语句放在任何类的“顶层”。

赋值语句需要包含方法,构造函数,静态初始化程序或实例初始化程序。

你写的时候

int i = 100;

你实际上是在声明内部类的字段(如你所知)。如果您在构造函数,方法等中执行此操作,则可以重新分配此字段。

<强>附录

以下使用实例初始化程序,只是为了好玩:

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

编译正常,请参阅http://ideone.com/qjnv3

答案 1 :(得分:0)

第二项任务是错误的。您不能将常规代码放在方法,构造函数或初始化程序之外。这与匿名类无关。

答案 2 :(得分:0)

如果您想更改i的分配,则需要使用方法。

像这样:

public class TestSomething {

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