我目前正在尝试创建基于参数输入的不同构造的案例类。作为一个真实世界的用例,假设我们正在构建一个包含敏感信息的case类。因此,每当case类包含来自用户的数据时,我们都需要对他们的电话号码进行散列,否则就照常构建case类。如果这没有多大意义,我创建了一个更轻松的例子来说明我正在尝试做什么
假设我们正在创建一个不接受悲伤奶牛的案例类:
case class HappyCow(name: String, feeling: String)
我试图通过定义一个应用方法使case类构造成为有条件的:
case class HappyCow(name: String, feeling: String) {
def apply(name: String, feeling: String): HappyCow =
if (feeling == "sad") HappyCow(name, "Happy")
else HappyCow(name, feeling)
}
然而,测试我的解决方案是否有效会导致:
val cow1 = HappyCow("Moowy", "excited")
val cow2 = HappyCow("MooMoo", "sad")
println(cow1) // HappyCow(Moowy,excited)
println(cow2) // HappyCow(MooMoo,sad)
println(cow2.feeling) // sad
我期望CCD_;快乐">
apply
应该是伴随对象的方法,而不是case类。
apply
的内部定义也取代了HappyCow(name, "Happy")
。。。对于CCD_ 5。。。,否则就是无限递归。
case class HappyCow(name: String, feeling: String)
object HappyCow {
def apply(name: String, feeling: String): HappyCow =
if (feeling == "sad") new HappyCow(name, "Happy")
else new HappyCow(name, feeling)
}
val cow1 = HappyCow("Moowy", "excited")
val cow2 = HappyCow("MooMoo", "sad")
println(cow1) // HappyCow(Moowy,excited)
println(cow2) // HappyCow(MooMoo,Happy)
println(cow2.feeling) // Happy