gpt4 book ai didi

java - 为什么书上说这里需要final?

转载 作者:行者123 更新时间:2023-12-04 22:26:41 24 4
gpt4 key购买 nike

该代码来自《Thinking in Java》一书。我不知道为什么我必须在这里添加 final 语法。我删除了 final 并且程序仍然编译。但是,书中说我必须添加它。

// initialization. A briefer version of Parcel5.java.
public class Parcel9 {
// Argument must be final to use inside
// anonymous inner class:
public Destination destination(final String dest) {
return new Destination() {
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.destination("Tasmania");
}
} ///:~

最佳答案

这本书(或章节/章节)很可能是在 Java 8 时代之前编写的。

Java 对匿名类施加了限制,匿名类可能无法访问局部变量,除非它是最终的。

在 Java 8 中,该限制也适用于 lambda 表达式。但是,除此之外,Java 8 添加了有效 final 的概念,这使得编译器更聪明,因为它检测到变量是最终的,因为它没有在本地重新分配,从而使 final 关键字的显式使用在这样的情况。

因此,如果您在 Java 7 或更早版本上编译该代码,您将遇到本书教读者避免的编译器错误。

关于java - 为什么书上说这里需要final?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59797721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com