有trait
像下面这样的
trait MyTrait
{
val country: String,
val state: String,
val commune: String = "nothing"
}
现正实施MyTrait
case class ImplementTrait(
country:String,
state: String,
//commune, how to provide commune's default value if commune is not provided while initialising ImplementTrait
) extends MyTrait
例如
ImplementTrait(country, state)
,应该可以工作,因为它将采用commune
默认值
ImplementTrait(country, state, commune)
,也应该有效,因为commune
价值现在存在
有什么建议吗?
我认为没有可以轻松自动完成的事情,但您可能需要考虑以下事项:
您可以在 Scastie 上试用此代码。
请注意我对您最初的建议做了一些修改,作为进一步的反馈:
val
s中没有strait
:你当然最了解你想要涵盖的用例,但一般来说,不鼓励使用val
s ,因为继承特征的顺序可能会影响类的初始化(有关更多详细信息,请参阅此处)trait
final case class
:虽然不能直接在案例类之间继承,但可以让普通类从案例类继承——这不太可能是您想要的,并且可能会影响值语义,这就是为什么通常建议将所有案例类都设为最终类(有关更多详细信息,请参阅此处)