Kotlin: propiedad individual con varios setters de diferentes types

Estoy tratando de build una class que tenga una propiedad de tipo LocalDate que tenga LocalDate que acepten diferentes types: LocalDate o String . En el caso de LocalDate , el valor se asigna directamente, en el caso de String , se analiza y luego se asigna. En Java, solo necesito implementar dos setters sobrecargados que manejen ambos casos mencionados anteriormente. Pero no tengo idea de cómo manejar eso en Kotlin. He intentado esto:

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

No comstack ¿Cómo puedo resolver ese problema?

Entonces, si solo quieres buildlo (a través del constructor ), simplemente crea un constructor secundario

 SomeExampleClass(LocalDate.MAX) SomeExampleClass("2007-12-03") class SomeExampleClass(var _date: LocalDate) { constructor(_date: String) : this(LocalDate.parse(_date)) } 

Después de un time volví al problema de los setters sobrecargados y desarrollé la siguiente solución:

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

No comstack porque el parámetro de su setter debería ser Any para poder pasar diferentes types ( String y LocalDate ). Esto no esta permitido:

 var date = _date //Error: Setter parameter type must be equal to the type of the property, ie 'LocalDate' set(value: Any){...} 

Entonces no puedes usar ese setter en tu escenario. Implementarlo con setters sobrecargados como en java o proporcionar constructores que acepten String o LocalDate

  1. Setters de sobrecarga

     class SomeExampleClass(var _date: LocalDate) { fun setDate(d: LocalDate) { _date = d } fun setDate(d: String) { setDate(LocalDate.parse(d)) } } 
  2. Proporcionar constructores

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

El segundo ejemplo se puede simplificar a lo que Guenhter sugirió.

  • Crear un nuevo object de module de nodo de kotlin
  • RxAndroid: al usar RxView.touches se borran otros controlleres
  • Filter rxjava no funciona
  • Evento táctil de interceptación y networkingirigirlo en function del estado del evento de movimiento
  • Cómo controlar cuándo las importaciones son reemplazadas por comodines en Android Studio en files de Kotlin
  • ¿Kapt es compatible con Maven?
  • Almacenar datos en BEAN (Spring Boot REST)
  • ¿Puedo hacer reference a una sobrecarga de function específica?
  • Spring Boot ThymeLeaf y Kotlin: ¿el valor de la casilla no se pasa al controller?
  • ¿Cómo crear una matriz Java en Kotlin para @PropertySource?
  • Cómo hacer comprobaciones nulas con las funciones de extensión de Kotlin en una actividad de Android