Как я могу инициализировать свойство с помощью пользовательского установщика?
Например, в своем установщике я проверяю, чтобы значение не было отрицательным.
class Foo(length: Int) {
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
}
Однако, если я его назову как Foo(-5)
исключение не вызывается, так как установщики не вызываются при инициализации свойств.
Еще одна вещь, которую я попробовал, была ниже, но тогда кажется неправильным устанавливать длину дважды.
class Foo(length: Int) {
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
init {
this.length = length
}
}
Наконец, я подумал о приведенном ниже коде, но это кажется неправильным, поскольку вы проверяете неправильное значение в двух местах.
class Foo(length: Int) {
init {
if (length < 0) throw IllegalArgumentException("Can't be negative.")
}
var length = length
set(value) {
if (value < 0) throw IllegalArgumentException("Can't be negative.")
field = value
}
}
}