Kotlin:单一财产与多个不同types的制定者
我试图建立一个具有LocalDate
types属性的类,它具有接受不同types的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) } } }
它不编译。 我该如何解决这个问题?
过了一段时间,我回到了重载setter的问题,并开发了以下解决方案:
class A(_date: LocalDate) { var date: Any = _date set(value) { field = helperSet(value) } get() = field as LocalDate private fun helperSet(t: T) = when (t) { is LocalDate -> t is String -> LocalDate.parse(t) else -> throw IllegalArgumentException() } }
所以如果你只是想构造它(通过constructor
),只需创建一个辅助构造函数
SomeExampleClass(LocalDate.MAX) SomeExampleClass("2007-12-03") class SomeExampleClass(var _date: LocalDate) { constructor(_date: String) : this(LocalDate.parse(_date)) }