Java不可变类?

sfrj:

我找到了一篇有趣的代码文章:

public class Employee {

    private String firstName;
    private String lastName;

    //private default constructor
    private Employee(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public static Employee valueOf (String firstName, String lastName) {
        return new Employee(firstName, lastName);
    }
}

我真的很好奇了解创建此类的优势。我知道这里的此类对象是不可变的,因为一旦初始化就无法更改其变量值。我以前从未做过这样的事情,而且我真的不了解它的优势。

  • 为什么是个好习惯?
  • 您能说出可以使用这种方法的情况吗?
  • 常量或只读变量呢?那不是很相似吗?
  • 在文章中说,这不利于应用程序的性能。但是为什么呢?
Santosh:

您提到的示例是不可变对象它在编程语言中被广泛使用的概念

从上面的链接报价。优点是

  • 易于构建,测试和使用
  • 自动是线程安全的,没有同步问题
  • 不需要复制构造函数
  • 不需要克隆的实现
  • 允许hashCode使用延迟初始化,并缓存其返回值
  • 用作字段时不需要防御性地复制
  • 制作好Map键和Set元素(这些对象在集合中时不得更改状态)
  • 在构造时就建立了其类不变式,因此不再需要检查
  • 总是具有“失败原子性”(约书亚·布洛赫(Joshua Bloch)使用的术语):如果一个不可变的对象-抛出异常,则它永远不会处于不希望的状态或不确定的状态

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章