Котлин: одно свойство с несколькими сеттерами разных типов



Я пытаюсь построить класс, который имеет свойство типа 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)
}
}
}


Он не компилируется. Как я могу решить такую проблему?

499   2  

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

    Ничего не найдено.