如何使用 final setter 方法创建超类的不可变子类?

How can i make an immutable subclass of a superclass with final setter methods?

我想创建一个不可变的 Scala class,但我也想用最终设置器扩展 java superclass。

这可能吗?如果不可能,最好的(最类似于扩展的)解决方法是什么?

由于您无法重写 final 方法,这意味着即使您找到了一些技巧来扩展它(例如,通过使用另一个方法签名或委托调用),您仍然会有一个“public final" setter 您的客户可以使用的方法,在您的不可变 class 中。我认为这是一个很大的缺陷,因为您的不可变性不会在所有情况下都得到保留。

我建议定义一个新的 Class,它不从 Mutable 扩展,而是将一些操作委托给它,只有那些不创建可变性的操作。

在Java或像Guava这样的库中经常是这样实现的,我们创建一个可变对象的私有内部字段,我们只公开publicly不会改变的方法列表本身。