我正在尝试构建一个具有LocalDate
类型属性的类,该类具有接受不同类型的setter:LocalDate
或String
。如果是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)
}
}
}
它没有编译。我该如何解决这个问题?
答案 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))
}