java 只读_java – 可以使一个对象“只读”一个方法

不严格也就是说,可以使对象变异的引用不能被转换为不能使对象变异的引用。另外,除了使用约定之外,没有办法表示一个类型是不可变的或可变的。

确保某种形式的不变性的唯一功能将是最后的领域 – 一旦写入,它们就不能被修改。

也就是说,有办法设计类,以防止不必要的突变。这里有一些技巧:

> Defensive Copying.传递对象的副本,以便如果它是突变的,则不会破坏您的内部不变量。

>使用访问修饰符和/或接口仅公开只读方法。您可以使用访问修改(public / private / protected),可能与接口组合,以便只有某些方法对其他对象可见。如果暴露的方法本质上是只读的,那么你是安全的。

>默认情况下使您的对象不可变。对象上的任何操作实际上都会返回对象的副本。

另外请注意,SDK中的API有时会返回对象的不可变版本,例如Collections.unmodifiableList。尝试突变不可变列表将抛出异常。这不会静态地强制执行不变性(在使用静态类型系统的编译时),而是动态(在运行时)强制执行它的便宜而有效的方法。

有许多关于Java扩展的研究建议,以更好地控制混叠和可访问性。例如,添加一个只读关键字。没有一个是我知道计划在未来版本的Java中包含的。如果您有兴趣,可以看看这些指针:

Checker框架非常有趣。在Checker框架中,查看Generic Universe Types检查器,IGJ不可变性检查器和Javari不可变性检查器。该框架使用注释工作,所以它不是侵扰性的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值