gpt4 book ai didi

java - 在 Scala 中获得 "setter"的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 11:46:34 24 4
gpt4 key购买 nike

如果在 Java 类中,成员的 setter 中有一些逻辑或数据清理,那么对 Scala 案例类执行相同操作的正确且普遍认可的方法是什么?

断言?实现你自己的 apply 方法?

最佳答案

一种选择是使用 deflazy val 来获取转换后的值。例如

case class PostalCode(value: String) {
lazy val clean: String = value.replaceAll(" ","").toUpperCase
}

另一个选项,如果您不希望原始值保留,和/或您想抛出异常或因输入错误而失败:

case class PostalCode(value: String)
case object PostalCode {
def parse(s: String): Option[PostalCode] = try {
Some(PostalCode(someThrowingLogic(s)))
}
catch {
case e: Exception => None
}
def clean(s: String): PostalCode = PostalCode(s.replaceAll(" ","").toUpperCase)
}

这使得用户仍然可以使用普通的构造函数,而不是 PostalCode.parsePostalCode.clean。这是另一种选择;

trait PostalCode {
def value: String
}
case object PostalCode {
private case class PCImpl(value: String) extends PostalCode
def apply(v: String): PostalCode = v.replaceAll(" ","") match {
case s if s.length == 6 =>
PCImpl(s.toUpperCase)
case _ =>
throw new IllegalArgumentException(v + " is not a valid postal code.")
}

关于java - 在 Scala 中获得 "setter"的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156790/

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