gpt4 book ai didi

java - 如何在 Scala 中制作功能齐全的不可变类?

转载 作者:行者123 更新时间:2023-11-29 04:57:13 25 4
gpt4 key购买 nike

我注意到 Scala 有案例类。这些似乎是用于模式匹配的,但我喜欢我可以用它们来做到这一点:

val bankAccount1 = new BankAccount("Daniel", 100)
val bankAccount2 = bankAccount1.copy(funds = 200)

现在“丹尼尔”有两个银行账户,一个有 100 美元,一个有 200 美元。但是当事情变得更复杂时,BankAccount 需要被子类化,而这不起作用,因为案例类不能扩展其他案例类。

我想要不可变的类,而不是可以扩展到更多不可变的类。就像我希望能够扩展 BankAccount 以拥有不可变的子类 SavingsBankAccountCheckingBankAccount。我不确定此时是否需要扩展/实现 Clonable 接口(interface)或定义自定义复制方法或类似的东西。我不想在类(class)中放置太多样板文件。

(如果可能),我如何在 Scala 中创建可以复制和子类化并且不会过于困惑或冗长的不可变类?

最佳答案

我认为在 Scala 中执行此操作的惯用方法是使用封装而不是继承。例如你可以:

case class BankAccount(id: AccountId, customer: Customer)
case class SavingsBankAccount(account: BankAccount, line: SavingsLine)

这样您就可以保持不变性和自动应用、取消应用、equals、hashCode 和复制方法生成的良好特性。

但是,如果您真的想使用继承,您别无选择,只能推出您自己的自定义解决方案。例如,实现一个特征 SubclassableCaseClass,它实现辅助方法以快速定义方法案例类,免费提供给您。

关于java - 如何在 Scala 中制作功能齐全的不可变类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com