【发布时间】:2015-07-05 01:23:01
【问题描述】:
假设我有以下课程:
public final class Person {
final private String personFirstName;
final private String personLastName;
final private ConcurrentMap<Double, String> phoneMessages;
public Person(String firstname, String lastname) {
phoneMessages = new ConcurrentHashMap<Double, String>();
this.personFirstName = firstname;
this.personLastName = lastname;
}
public void add(Double key, String item) {
phoneMessages.put(key, item);
}
public String getPersonFirstName() {
return personFirstName;
}
public String getPersonLastName() {
return personLastName;
}
}
即使我创建了一个具有私有最终线程安全集合的类,我的类是不可变的吗?我的猜测是否定的。
如果在对象中包含集合不是正确的做法,那么 Java 中的正确做法是什么?我将如何设计包含集合的类?
【问题讨论】:
-
为什么不是正确的做法?并非所有东西都必须是不可变的。
-
@JBNizet - 我等待阅读这些话的时间最长。我正在阅读关于不可变类的内容,而我对可变类的印象是不!我开始重新考虑我的很多代码,然后出现了这个问题,所以它的设计方式,你会离开它吗?你不会改变什么?
-
再次。我只知道你的代码是这个类。我不知道你打算用它做什么,它的使用环境等等。所以不可能推荐一种设计而不是另一种。
-
您将创建另一个地图,并使用该地图创建另一个 Person 实例。根据定义,不可变对象在创建后不得修改。
标签: java multithreading thread-safety immutability