Kotlin:具有多个不同类型设置器的单个属性

Kotlin:具有多个不同类型设置器的单个属性,kotlin,Kotlin,我正在尝试构建一个属性为LocalDate类型的类,该类的setter接受不同的类型:LocalDate或String。对于LocalDate,直接赋值;对于String,解析后赋值。 在Java中,我只需要实现两个重载setter来处理上述两种情况。但我不知道在科特林该怎么处理。我试过这个: class SomeExampleClass(var _date: LocalDate) { var date = _date set(value) { w

我正在尝试构建一个属性为
LocalDate
类型的类,该类的setter接受不同的类型:
LocalDate
String
。对于
LocalDate
,直接赋值;对于
String
,解析后赋值。 在Java中,我只需要实现两个重载setter来处理上述两种情况。但我不知道在科特林该怎么处理。我试过这个:

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

它不能编译。如何解决这样的问题?

因此,如果您只想构造它(通过
构造函数),只需创建一个


一段时间后,我又回到了设置器过载的问题,并开发了以下解决方案:

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()
    }
}
A类(\u日期:LocalDate){
变量日期:任意=\u日期
设置(值){
字段=帮助集(值)
}
get()=字段作为LocalDate
私人娱乐助手集(t:t)=时间(t){
是LocalDate->t吗
is String->LocalDate.parse(t)
else->抛出IllegalArgumentException()
}
}

您希望能够在构造之后使用其中一个来设置它,或者使用其中一个来构造它?String:set after(数据从JSP文件传输到Spring控制器时就是这种情况)。LocalDate:此时不支持构造或设置AfterBetter重载。您可以参考这个或这个。不幸的是,它在实际代码而不是简化代码的情况下不起作用,但我猜屏幕截图中的问题与此问题无关,不是吗?通过创建一个DTO类将字符串类型为date和time的数据从JSP传输到Spring controller,然后将其转换为LocalDate/LocalTime格式的类,解决了实际问题。这有点不错,但糟糕的是,所有的验证都是在运行时进行的。很遗憾,Kotlin不支持这种开箱即用的验证。。
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()
    }
}