In Kotlin, can a property of a data class have multiple types? For example:
val CurrentValue: Double?|String or val CurrentValue: String|Array?
I cannot find it in the documentation.
CodePudding user response:
Union types are not a thing in Kotlin.
You may use a sealed class
instead.
sealed class CurrentValue<T>(val value: T) {
class TextualValue(value: String) : CurrentValue(value)
class NumericValue(value: Double) : CurrentValue(value)
}
Which then you can use exhaustive when
expressions (similar to switch
in other languages) in order to access the value in a type-safe manner:
fun doSomething(value: CurrentValue<*>) {
when(value) {
is TextualValue -> value.value // is recognised as a String
is NumericValue -> value.value // is recognised as a Double
}
}
If creating a type is way too much for you then you can perform a when
statement and treat a parameter based on it's type and perhaps normalize it:
fun parseValue(value: Any?): Double? = when(value){
is Double -> value
is String -> value.toDoubleOrNull()
is Int -> value.toDouble()
else -> null
}