Котлин: одно свойство с несколькими сеттерами разных типов
Я пытаюсь построить класс, который имеет свойство типа LocalDate, который имеет сеттеры, которые принимают различные типы: LocalDate или String. В случае LocalDate значение присваивается непосредственно, в случае String оно анализируется и затем присваивается.
В Java мне просто нужно реализовать два перегруженных сеттера, обрабатывающих оба вышеупомянутых случая. Но я понятия не имею, как справиться с этим в Котлине. Я пробовал это:
class SomeExampleClass(var _date: LocalDate) {
var date = _date
set(value) {
when(value) {
is LocalDate -> value
is String -> LocalDate.parse(value)
}
}
}
Он не компилируется. Как я могу решить такую проблему?
2 ответов:
Поэтому, если вы просто хотите построить его (через
constructor), просто создайте вторичный конструкторSomeExampleClass(LocalDate.MAX) SomeExampleClass("2007-12-03") class SomeExampleClass(var _date: LocalDate) { constructor(_date: String) : this(LocalDate.parse(_date)) }
Через некоторое время я вернулся к проблеме перегруженных сеттеров и разработал следующее решение:
class A(_date: LocalDate) { var date: Any = _date set(value) { field = helperSet(value) } get() = field as LocalDate private fun <T> helperSet(t: T) = when (t) { is LocalDate -> t is String -> LocalDate.parse(t) else -> throw IllegalArgumentException() } }
Comments