为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们需要不变的阶级?

为什么我们需要不变的阶级?

慕仙森 2019-10-16 11:05:06
我无法获得需要不可变类的方案。您是否曾经遇到过此类要求?或者您可以给我们提供任何实际的示例来说明我们应该使用这种模式的情况。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

Joshua Bloch撰写的有效Java概述了编写不可变类的几个原因:

  • 简单-每个班级仅处于一种状态

  • 线程安全-因为状态不能更改,所以不需要同步

  • 以一成不变的风格编写代码可以带来更强大的代码。想象一下字符串不是一成不变的吗?任何返回String的getter方法都将要求实现在返回String之前创建一个防御性副本-否则客户端可能会意外或恶意破坏该对象的状态。

通常,除非导致严重的性能问题,否则使对象不可变是一种好习惯。在这种情况下,可变的构建器对象可用于构建不可变的对象,例如StringBuilder


查看完整回答
反对 回复 2019-10-16
?
慕森王

TA贡献1777条经验 获得超3个赞

Java实际上是所有引用之一。有时一个实例被多次引用。如果更改这样的实例,它将反映到其所有引用中。有时,您根本不想使用它来提高鲁棒性和线程安全性。然后,一个不可变的类很有用,因此必须创建一个实例并将其重新分配给当前引用。这样,其他引用的原始实例将保持不变。

想象一下,如果Java String是可变的,它将是什么样子。


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信