En Kotlin, ¿puede una propiedad de una clase de datos tener varios tipos? Por ejemplo:
val CurrentValue: Double?|String o val CurrentValue: String|Array?
No puedo encontrarlo en la documentación.
Los tipos de unión no son una cosa en Kotlin.
Puede usar una sealed class en su lugar.
sealed class CurrentValue<T>(val value: T) { class TextualValue(value: String) : CurrentValue(value) class NumericValue(value: Double) : CurrentValue(value) } Que luego puede usar expresiones when exhaustivas (similares a switch en otros idiomas) para acceder al valor de una manera segura:
fun doSomething(value: CurrentValue<*>) { when(value) { is TextualValue -> value.value // is recognised as a String is NumericValue -> value.value // is recognised as a Double } } Si crear un tipo es demasiado para usted, puede realizar una declaración when y tratar un parámetro según su tipo y quizás normalizarlo:
fun parseValue(value: Any?): Double? = when(value){ is Double -> value is String -> value.toDoubleOrNull() is Int -> value.toDouble() else -> null }