匿名内部类Java中的赋值

时间:2015-03-20 19:05:41

标签: java

这里我有一个包含匿名内部类的类:

public class Example {
    int value;
    Example(int value) {
        this.value = value;     
    }

    void bumpUp() {
        value++;
    }
    static Example makeExample(int startVal) {
        return new Counter(startVal) {

            int bumpValue = 2;
//          value = startVal;

            void bumpUp() {                 
                bumpValue = (bumpValue == 2) ? 1: 2;
                value+= bumpValue;
            }
        };
    }
}

如果我取消注释value = startVal的行,Eclipse会抛出错误,说上面的行是错误的。为什么我不能把value = startVal放在那里?

谢谢!

2 个答案:

答案 0 :(得分:3)

首先,放置该行会出现语法错误,因为您无法获得方法之外的指令。而且你试图在匿名内部阶级的体内放一条指令。

但最重要的是,您不需要该行,也不需要构造函数(对于匿名内部类是不可能的),也不需要初始化程序块。

构造匿名内部类实例时会自动调用超类的构造函数,并将startVal传递给Example的构造函数,最后将其赋值给value属性new Counter(startVal)

最后,Counter没有任何意义(Counter类在哪里)?我相信它是复制粘贴错误,或者您在其他地方声明了Counter类。在后一种情况下,Example应该扩展public class Example { int value; Example(int value) { this.value = value; } void bumpUp() { this.value++; } static Example makeExample(int startVal) { return new Example(startVal) { int bumpValue = 2; @Override void bumpUp() { this.bumpValue = (this.bumpValue == 2) ? 1 : 2; this.value += this.bumpValue; } }; } public static void main(String[] args) { Example a = Example.makeExample(7); System.out.println(a.value); a.bumpUp(); System.out.println(a.value); a.bumpUp(); System.out.println(a.value); a.bumpUp(); System.out.println(a.value); a.bumpUp(); System.out.println(a.value); a.bumpUp(); System.out.println(a.value); } } ,否则会出现编译错误。

以下是包含所有修复的代码:

7
8
10
11
13
14

打印:

{{1}}

答案 1 :(得分:2)

这里有两个问题:

您正在课堂上使用声明

value = startVal;

即使它已修复,你仍然会引用静态方法的非静态字段

static Example makeExample(int startVal)