我有一个看起来像这样的域模型:
case class Account(id: Int, name: String)
trait BalanceTotal {
def balance: BigDecimal
}
我的目标是拥有一个简单、轻量级的Account
案例类,然后是一个Account with BalanceTotal
仅在进行余额计算的方法内创建的增强类(这很昂贵)。
使用这种结构,我可以静态地确保当我只有一个轻量级对象时,我永远不会指望存在平衡。我当然知道Option
,但我希望类型检查器阻止代码在我需要平衡丰富对象的地方使用轻量级对象,反之亦然,我认为这不会Option
给我。
无论如何,我想做的是:
for{ Account(id,name) <- accounts } {
yield Account(id, name) with BalanceTotal {
override val balance = BigDecimal(44)
}
}
但这失败了:
';' expected but 'with' found
如果我尝试使用new Account
而不是Account
,我得到:
super constructor arguments cannot reference unconstructed `this`
我认为这与使案例类起作用的巫术有关。
有可能做我想做的事吗?
更新:进一步考虑,我想这与禁止案例类继承有关。但我确实需要这里的案例类魔法:我的 ScalaQuery 映射依赖于生成的apply
和unapply
方法。