Я не знаю, как называть мои "сеттеры" на неизменяемых объектах?
Для изменяемого объекта 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)
Это все хорошо, но что, если Person неизменяем?
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
?
РЕДАКТИРОВАТЬ: Мне нужно поместить что-то в метод "установщика", например:
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
не годится.
EDIT 2 :
Поскольку на мой фальшивый пример так много комментариев (что он неверен), я лучше дам вам ссылку на настоящий класс ( Аватар
).
методы "установки", которые я не знаю, что вызывать, это updateStrength
, updateWisdom
... но я, вероятно, скоро изменю их на withStrength
..