【发布时间】:2020-10-14 09:11:28
【问题描述】:
我想创建一个不可变的 scala 类,但我也想用 final setter 扩展一个 java 超类。
这可能吗?如果不可能,最好(最类似于扩展)的解决方法是什么?
【问题讨论】:
标签: java scala class inheritance immutability
我想创建一个不可变的 scala 类,但我也想用 final setter 扩展一个 java 超类。
这可能吗?如果不可能,最好(最类似于扩展)的解决方法是什么?
【问题讨论】:
标签: java scala class inheritance immutability
由于您不能覆盖 final 方法,这意味着即使您找到了一些技巧来扩展它(例如,使用另一个方法签名或委托调用),您仍然会有一个“public final”setter您的客户可以在您的 Immutable 类中使用的方法。我认为这是一个很大的缺陷,因为您的不变性不会在所有情况下都得到保留。
我建议定义一个新的类,它不从可变类扩展,而是将一些操作委托给它,只有那些不创建可变性的类。
通常是这样,它在 Java 或 Guava 等库中实现,我们创建可变对象的私有内部字段,并且我们只公开不会改变列表本身的公开方法。
【讨论】: