class Student(firstName: String, lastName: String, rollNum: String)
需要将firstName和lastName转换为大写。在设计上,当我们将这些值赋给
val st1 = Student(
firstName = firstName.toUpperCase,
lastName = lastName.toUpperCase,
rollNum = rollNum
)
或
case class UpperCaseStr(rawValue: String) {
def value: String = rawValue.toUpperCase
}
val st1 = Student(
firstName = UpperCaseStr(firstName),
lastName = UpperCaseStr(lastName),
rollNum = rollNum
)
如果你的域需要强制执行一些名字的规则,我会创建一个智能构造函数。
case class Name private (val value: String) {
def copy(value: String = this.value) = Name(value)
}
object Name {
def apply(value: String) = new Name(value.toUpperCase)
}
并用它来代替 String
case class Student(firstName: Name, lastName: Name, rollNum: String)
如果只是一次的事情,不会服务于领域建模的正确性,我就会用一个助手,将调用的 .toUpperCase
就像 @Markus Appel 建议的那样。
你应该让 Student
a case class
,否则将无法使用。
然后,结合使用 .copy
和 .toUpperCase
:
case class Student(firstName: String, lastName: String, rollNum: String)
def upperCaseStudent(s: Student): Student = s.copy(
firstName = s.firstName.toUpperCase,
lastName = s.lastName.toUpperCase
)