ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java中怎么创建一个不可变对象? [打印本页]

作者: 汕尾海湾    时间: 2024-11-2 12:24
标题: Java中怎么创建一个不可变对象?
不可变对象(Immutable Object)的定义

不可变对象是指一旦创建后,其状态(即对象的数据)就不能被修改或改变的对象。这种对象具有一些重要的特性,如线程安全性、安全性、可重用性等。
Java中创建不可变对象的步骤

在Java中,创建不可变对象通常遵循以下步骤:
示例代码

以下是一个创建不可变对象的示例代码:
public final class ImmutablePerson {
private final String name;
private final int age;
private final List<String> hobbies;
// 构造函数
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// 对可变对象举行防御性复制
this.hobbies = new ArrayList<>(hobbies);
}
// Getter方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// 返回副本以避免外部修改
return new ArrayList<>(hobbies);
}
// 重写toString方法以便于打印输出
@Override
public String toString() {
return "ImmutablePerson{" +
"name='" + name + '\'' +
", age=" + age +
", hobbies=" + hobbies +
'}';
}
// 主方法用于测试
public static void main(String[] args) {
List<String> hobbies = new ArrayList<>();
hobbies.add("Reading");
hobbies.add("Swimming");
ImmutablePerson person = new ImmutablePerson("Alice", 30, hobbies);
// 打印输出不可变对象
System.out.println(person);
// 尝试修改不可变对象(这将导致编译错误)
// person.setName("Bob"); // 编译错误:没有setName方法
// 尝试通过getter方法返回的副本修改原始对象(这不会影响原始对象)
List<String> personHobbies = person.getHobbies();
personHobbies.add("Running");
System.out.println(person); // 输出不会显示添加的"Running"
}
}
在这个示例中,ImmutablePerson类是一个不可变对象。它的字段name、age和hobbies都被声明为private和final,并且没有提供修改这些字段的setter方法。对于可变对象hobbies,在构造函数中举行了防御性复制,并且在getHobbies方法中返回了副本以避免外部修改。这样,一旦创建了ImmutablePerson对象,其状态就保持不变。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4