验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

Java Immutable:不可变对象设计原则

阅读:585 来源:乙速云 作者:代码code

Java Immutable:不可变对象设计原则

在Java中,不可变对象是指一旦创建,其状态就不能改变的对象。这种设计原则有助于提高代码的可读性、可维护性和安全性。以下是一些关于Java不可变对象设计原则的关键点:

1. 声明为final

  • 类声明为final:防止子类继承并修改其行为。
  • 字段声明为final:确保字段在对象创建后不能被修改。
public final class ImmutableClass {
    private final int immutableField;
    // ...
}

2. 私有化字段

  • 将字段声明为私有,防止外部直接访问和修改。
private final int immutableField;

3. 不提供修改器方法

  • 不提供setter方法或其他任何可以修改对象状态的方法。
// 不要这样做
public void setImmutableField(int value) {
    this.immutableField = value;
}

4. 确保所有字段都是不可变的

  • 如果字段是引用类型,确保该引用类型本身也是不可变的,或者返回其副本而不是原始引用。
private final List immutableList;

public ImmutableClass(List list) {
    this.immutableList = Collections.unmodifiableList(new ArrayList<>(list));
}

5. 在构造函数中初始化所有字段

  • 确保对象在创建时就处于有效状态,并且之后不会改变。
public ImmutableClass(int immutableField, List immutableList) {
    this.immutableField = immutableField;
    this.immutableList = Collections.unmodifiableList(new ArrayList<>(immutableList));
}

6. 返回不可变对象

  • 如果方法需要返回一个对象,确保返回的是不可变对象的副本。
public ImmutableClass getImmutableCopy() {
    return new ImmutableClass(this.immutableField, this.immutableList);
}

7. 使用防御性复制

  • 在构造函数和setter方法中使用防御性复制来防止外部修改传入的可变对象。
public ImmutableClass(List list) {
    this.immutableList = Collections.unmodifiableList(new ArrayList<>(list));
}

8. 文档化不可变性

  • 在类和方法的文档中明确说明对象的不可变性,以便其他开发者了解和使用。
/**
 * This class represents an immutable object.
 */
public final class ImmutableClass {
    // ...
}

示例代码

以下是一个完整的不可变类示例:

import java.util.Collections;
import java.util.List;

public final class ImmutableClass {
    private final int immutableField;
    private final List immutableList;

    public ImmutableClass(int immutableField, List immutableList) {
        this.immutableField = immutableField;
        this.immutableList = Collections.unmodifiableList(new ArrayList<>(immutableList));
    }

    public int getImmutableField() {
        return immutableField;
    }

    public List getImmutableList() {
        return immutableList;
    }

    public ImmutableClass getImmutableCopy() {
        return new ImmutableClass(this.immutableField, this.immutableList);
    }
}

通过遵循这些原则,可以创建出安全、可靠且易于维护的不可变对象。

分享到:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>