我有一个班级人员
class Person(val name: String, val height : Int, val weight: Int)
我想为我的类编写copy()
方法,该方法可以与复制方法对case case一样工作(复制和更新对象的属性)
我知道copy()
附带了案例类,但我没有使用它们所以我想为我的班级做同样的事情
请指导我该怎么做?
答案 0 :(得分:11)
只需创建一个复制方法,其中包含类定义中的所有字段作为参数,但使用现有值作为默认参数,然后使用所有参数创建新实例:
class Person(val name: String, val height : Int, val weight: Int) {
def copy(newName: String = name, newHeight: Int = height, newWeight: Int = weight): Person =
new Person(newName, newHeight, newWeight)
override def toString = s"Name: $name Height: $height Weight: $weight"
}
val person = new Person("bob", 183, 85)
val heavy_person = person.copy(newWeight = 120)
val different_person = person.copy(newName = "frank")
List(person, heavy_person, different_person) foreach {
println(_)
}
答案 1 :(得分:0)
在copy
方法中为参数使用相同的名称将使其与案例类中的copy
方法相似。
class Person(val name: String, val height: Int, val weight: Int) {
def copy(
name: String = this.name,
height: Int = this.height,
weight: Int = this.weight,
) = new Person(name, height, weight)
}
copy
方法可以按如下方式使用。
val john = new Person("John", 89, 160)
val joe = john.copy(name = "Joe")