您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在编程中,immutable
(不可变)类是指一旦创建后其状态就不能被修改的类。这种设计模式在多线程编程、函数式编程以及需要确保数据一致性的场景中非常有用。下面是一些实现不可变类的技巧:
将所有字段声明为 private
,以防止外部直接访问和修改。
public final class ImmutableClass {
private final int field1;
private final String field2;
}
在构造函数中初始化所有字段,并确保它们是 final
的,这样一旦对象被创建,这些字段就不能再被修改。
public final class ImmutableClass {
private final int field1;
private final String field2;
public ImmutableClass(int field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
}
不要提供任何可以修改对象状态的方法,如 setter
方法。
public final class ImmutableClass {
private final int field1;
private final String field2;
public ImmutableClass(int field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
// No setter methods
}
如果需要“修改”不可变对象,应该返回一个新的实例,而不是修改现有的实例。
public final class ImmutableClass {
private final int field1;
private final String field2;
public ImmutableClass(int field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
public ImmutableClass withField1(int newField1) {
return new ImmutableClass(newField1, this.field2);
}
public ImmutableClass withField2(String newField2) {
return new ImmutableClass(this.field1, newField2);
}
}
如果字段是引用类型,确保这些引用类型本身也是不可变的,或者在构造函数中创建它们的副本。
public final class ImmutableClass {
private final int field1;
private final List<String> field2;
public ImmutableClass(int field1, List<String> field2) {
this.field1 = field1;
this.field2 = Collections.unmodifiableList(new ArrayList<>(field2));
}
}
final
关键字将类声明为 final
,以防止它被继承,从而避免子类修改其行为。
public final class ImmutableClass {
// Class implementation
}
equals
和 hashCode
方法为了确保对象在集合中的正确行为,需要覆盖 equals
和 hashCode
方法。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ImmutableClass that = (ImmutableClass) o;
return field1 == that.field1 && Objects.equals(field2, that.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
toString
方法为了方便调试和日志记录,可以覆盖 toString
方法。
@Override
public String toString() {
return "ImmutableClass{" +
"field1=" + field1 +
", field2='" + field2 + '\'' +
'}';
}
通过遵循这些技巧,可以创建出安全且高效的不可变类。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。