匿名内部 class 不影响外部 class 成员
anonymous inner class not affect outer class member
输出是
foo
foo
但我期待它是
foo
bar
foo
我不明白为什么内部 class 不起作用
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();
}
}
实际输出为:
foo
巴尔
巴尔
如果在创建匿名后正确调用 bar() 函数 class:
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();
}
}
没有调用匿名对象class的方法bar()
。这就是为什么其中的 print 语句永远不会执行的原因。
您可以按如下方式更新代码:
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
}.bar();
调用bar
方法。
现在您已经执行了此方法,您将实例变量 foo
分配给了值 "barr"
,方法 () 中的最后一个打印语句将打印更新后的值 "barr"
.
它会影响外部成员但是改变成员变量的代码必须执行所以你的代码应该是这样的:
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
输出是
foo
foo
但我期待它是
foo
bar
foo
我不明白为什么内部 class 不起作用
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();
}
}
实际输出为:
foo
巴尔
巴尔
如果在创建匿名后正确调用 bar() 函数 class:
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();
}
}
没有调用匿名对象class的方法bar()
。这就是为什么其中的 print 语句永远不会执行的原因。
您可以按如下方式更新代码:
new Object() {
public void bar() {
foo = "barr";
System.out.println(foo); //not work
}
}.bar();
调用bar
方法。
现在您已经执行了此方法,您将实例变量 foo
分配给了值 "barr"
,方法 () 中的最后一个打印语句将打印更新后的值 "barr"
.
它会影响外部成员但是改变成员变量的代码必须执行所以你的代码应该是这样的:
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