JPL 8:a 情况,effectively final 和 final 的区别
JPL 8:a situation,the difference between effectively final and final
有效最终代码
public void say() {
String b = "222"; // effectively final b
class A {
public A(String c) {
b = "123"; // error
}
}
b = "123"; // success; if b is final, it is an error
}
有更详细的区别吗?
如果你的变量在声明后受到影响(例如,任何时候你写 "b = "123")那么它实际上不是最终的。
在内部 class 或嵌套 class(例如您的 class A)中,您只能从有效最终的外部范围(例如 b)引用变量。
相同的限制适用于派生自嵌套 classes 的构造,例如 lambda。
使用 "final" 关键字声明变量是一种确保变量有效的便捷方式。
有效最终代码
public void say() {
String b = "222"; // effectively final b
class A {
public A(String c) {
b = "123"; // error
}
}
b = "123"; // success; if b is final, it is an error
}
有更详细的区别吗?
如果你的变量在声明后受到影响(例如,任何时候你写 "b = "123")那么它实际上不是最终的。
在内部 class 或嵌套 class(例如您的 class A)中,您只能从有效最终的外部范围(例如 b)引用变量。
相同的限制适用于派生自嵌套 classes 的构造,例如 lambda。
使用 "final" 关键字声明变量是一种确保变量有效的便捷方式。