返回介绍

12.4.1 创建只读类

发布于 2024-10-15 23:56:26 字数 1000 浏览 0 评论 0 收藏 0

完全可以创建自己的只读类,下面是个简单的例子:

//: Immutable1.java
// Objects that cannot be modified
// are immune to aliasing.

public class Immutable1 {
  private int data;
  public Immutable1(int initVal) {
    data = initVal;
  }
  public int read() { return data; }
  public boolean nonzero() { return data != 0; }
  public Immutable1 quadruple() {
    return new Immutable1(data * 4);
  }
  static void f(Immutable1 i1) {
    Immutable1 quad = i1.quadruple();
    System.out.println("i1 = " + i1.read());
    System.out.println("quad = " + quad.read());
  }
  public static void main(String[] args) {
    Immutable1 x = new Immutable1(47);
    System.out.println("x = " + x.read());
    f(x);
    System.out.println("x = " + x.read());
  }
} ///:~

所有数据都设为 private,可以看到没有任何 public 方法对数据作出修改。事实上,确实需要修改一个对象的方法是 quadruple(),但它的作用是新建一个 Immutable1 对象,初始对象则是原封未动的。

方法 f() 需要取得一个 Immutable1 对象,并对其采取不同的操作,而 main() 的输出显示出没有对 x 作任何修改。因此,x 对象可别名处理许多次,不会造成任何伤害,因为根据 Immutable1 类的设计,它能保证对象不被改动。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文