匿名内部类不会影响外部类成员
问题描述:
foo
foo
,但我期待它是
foo
bar
foo
我也不下架,为什么内部类不起作用
class Test {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
};
System.out.println(foo);
}
}
public class Main {
public static void main(String[] args){
Test t=new Test();
t.method();
}
}
答
它会影响外部部件,但代码做出成员变量的变化必须执行使你的代码应该是这样的:
public class Main {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "bar";
System.out.println(foo);
}
}.bar();
System.out.println(foo);
}
public static void main(String[] args) {
Main t = new Main();
t.method();
}
}
输出:
foo
bar
bar
答
输出实际上是:
富
巴尔
巴尔
如果你正确地调用了吧()函数创建匿名类后:
class Test {
private String foo = "foo";
public void method() {
System.out.println(foo);
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo);
}
}.bar(); // Added invocation here
System.out.println(foo);
}
}
public class Main {
public static void main(String[] args) {
Test t = new Test();
t.method();
}
}
答
有匿名对象的方法bar()
没有呼叫类。这就是为什么它内部的print语句从不执行的原因。 您可以更新的代码如下:
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
}.bar();
调用bar
方法。 现在您已经执行了将实例变量foo
赋值为"barr"
的方法,方法()中的最后一个打印语句将打印更新值"barr"
。
你忘了调用该方法:'new Object(){...} .bar();' – shmosel
我不确定你为什么期望它恢复为“foo”。 – shmosel
你写的是打印“barr”的代码,但它不会执行。 –