【问题标题】:'copy' for non-case classes?非案例类的“复制”?
【发布时间】:2011-07-09 20:23:20
【问题描述】:

当我设计不可变对象时,案例类非常方便,因为自动生成了copy 方法。

但是案例类有它们自己的问题:它们不应该被继承,并且即使你不想要,它们也会给你一个提取器。

所以有时我不得不使用一个普通的 Scala 类。问题是我必须编写自己的不可变 API,这可能非常重复:

class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
  def withNewPrincipalBalance(bal: Double) = new Debt(bal, name, endDate)
}

有没有更可扩展的方式来做到这一点?有我可以使用的编译器插件吗?

【问题讨论】:

标签: scala


【解决方案1】:

我不了解编译器插件,但您可以定义 copy 方法,就像在使用命名参数和默认参数的案例类中生成的方法一样。

class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
  def copy(principalBalance: Double = principalBalance,
           name: String = name,
           endDate: LocalDate = endDate) = new Debt(principalBalance, name, endDate)
}

这不像每个属性 (withNewPrincipalBalance) 的单独方法那样重复,并且可以禁止更改某些值(例如创建日期)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2013-07-03
    • 2020-12-04
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多