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

sva*_*605 10 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)
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

它不编译.我该如何解决这个问题?

sva*_*605 5

一段时间后,我回到了二传手的问题,并制定了以下解决方案:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但太糟糕了,您获得的所有验证都是运行时。 (3认同)