Не знаю, как назвать мои «сеттеры» на неизменяемых объектах?
Для изменяемого объекта Person сеттеры работают так:
class Person(private var _name: String) {
def name = "Mr " + _name
def name_=(newName: String) {
_name = newName
}
}
val p = new Person("Olle")
println("Hi "+ p.name)
p.name = "Pelle"
println("Hi "+ p.name)
Это все хорошо, но что, если Персона неизменна?
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = new Person(newName)
}
val p = new Person("Olle")
println("Hi "+ p.name)
val p2 = p.whatHereName("Pelle")
println("Hi "+ p2.name)
Как назвать whatHereName
? 1010 *
EDIT:
Мне нужно поместить вещи в метод "setter", например так:
class Person(private val _name: String) {
def name = "Mr " + _name
def whatHereName(newName: String): Person = {
if(name.length > 3)
new Person(newName.capitalize)
else
throw new Exception("Invalid new name")
}
}
Реальный код намного больше этого, поэтому простой вызов метода copy
не подойдет.
РЕДАКТИРОВАТЬ 2:
Поскольку к моему фальшивому примеру так много комментариев (что оно неверно), лучше дать вам ссылку на реальный класс (Avatar
).
Методы "setter", которые я не знаю, что вызывать, это updateStrength
, updateWisdom
... но я, вероятно, скоро изменю это на withStrength
..