'Kotlin Data Class Property: Multiple types
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.
Solution 1:[1]
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<String>(value)
class NumericValue(value: Double) : CurrentValue<Double>(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
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | NimaAzhd |