gpt4 book ai didi

java - final 字段真的能防止 Java 中的可变性吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:06 24 4
gpt4 key购买 nike

来自名著Java Concurrency in Practice第 3.4.1 章最终字段

Just as it is a good practice to make all fields private unless they need greater visibility[EJ Item 12] , it is a good practice to make all fields final unless they need to be mutable.

我对 Java 中最终引用的理解:最终引用/字段只是阻止字段重新初始化,但如果它引用可变对象,我们仍然可以更改其状态以使其可变。所以我很难理解上面的引述。你怎么看?

最佳答案

final 字段阻止您更改字段本身(通过使其“指向”某个其他实例),但是如果该字段是对可变对象的引用,则没有什么可以阻止您这样做:

public void someFunction (final Person p) {
p = new Person("mickey","mouse"); //cant do this - its final
p.setFirstName("donald");
p.setLastName("duck");
}

上面的引用 p 是不可变的,但是引用指向的实际 Person 是可变的。当然,您可以将 Person 类设为不可变类,如下所示:

public class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
//getters and other methods here
}

这些类一旦创建,就不能以任何方式修改。

关于java - final 字段真的能防止 Java 中的可变性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787990/

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