Kotlin:具有多个不同类型的setter的单一属性

时间:2017-09-11 10:33:05

标签: kotlin

我正在尝试构建一个具有LocalDate类型属性的类,该类具有接受不同类型的setter:LocalDateString。如果是LocalDate,则会直接分配值,如果是String,则会对其进行解析然后进行分配。 在Java中,我只需要实现两个重载的setter来处理上述两种情况。但我不知道如何处理Kotlin。我试过这个:

class SomeExampleClass(var _date: LocalDate) {
    var date = _date
        set(value) {
            when(value) {
                is LocalDate -> value
                is String -> LocalDate.parse(value)
            }
        }
}

它没有编译。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

一段时间后,我回到了重载setter的问题,并开发了以下解决方案:

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()
    }
}

答案 1 :(得分:2)

因此,如果您只想构建它(通过constructor),只需创建一个secondary constructor

SomeExampleClass(LocalDate.MAX)
SomeExampleClass("2007-12-03")

class SomeExampleClass(var _date: LocalDate) {
    constructor(_date: String) : this(LocalDate.parse(_date))
}