创建**不可变对象(Immutable Object)**的核心思想是:对象一旦创建,其状态(字段值)就不能再被修改。下面以 Java 为主说明(其他语言思路类似),并给出通用原则。
final 修饰防止被继承后修改行为。
public final class User {
}
private final 修饰private final String name;
private final int age;
只提供 getter(或不提供,视需要)。
public User(String name, int age) {
this.name = name;
this.age = age;
}
如果字段是可变对象(如 Date、List):
private final List<String> roles;
public User(List<String> roles) {
this.roles = new ArrayList<>(roles); // 拷贝
}
public List<String> getRoles() {
return new ArrayList<>(roles); // 返回拷贝
}
不要直接返回可变引用。
public final class ImmutableUser {
private final String name;
private final int age;
private final List<String> roles;
public ImmutableUser(String name, int age, List<String> roles) {
this.name = name;
this.age = age;
this.roles = new ArrayList<>(roles);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getRoles() {
return new ArrayList<>(roles);
}
}
from typing import Tuple
class User:
def __init__(self, name: str, roles: Tuple[str, ...]):
self._name = name
self._roles = roles
@property
def name(self):
return self._name
或使用 dataclasses(frozen=True):
from dataclasses import dataclass
@dataclass(frozen=True)
class User:
name: str
age: int
const user = Object.freeze({
name: "Tom",
age: 18
});
如果你有具体语言或场景(如并发、DTO、函数式编程),我可以给更针对性的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。