【问题标题】:How can i make an immutable subclass of a superclass with final setter methods? [closed]如何使用 final setter 方法创建超类的不可变子类? [关闭]
【发布时间】:2020-10-14 09:11:28
【问题描述】:

我想创建一个不可变的 scala 类,但我也想用 final setter 扩展一个 java 超类。

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

【问题讨论】:

    标签: java scala class inheritance immutability


    【解决方案1】:

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

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

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

    【讨论】:

    • 不扩展,而是将操作委托给私有内部字段,这意味着子类不能作为参数传递给某些方法。然后,我将不得不尽可能晚地用 getter 公开私有内部字段,但这仍然违反了不变性。但无论如何,如果没有更好的选择,可能会这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多