v79
06/06/2020, 2:58 PMunion
type - I know it's not coming. Can anyone think of a less verbose way of implementing these combination of sealed classes?
val modifiers: MutableMap<String,Attribute> = mutableMapOf()
sealed class Attribute {
data class fValue(val value: Float) : Attribute() {
override fun toString(): String {
return value.toString()
}
}
data class iValue(val value: Int): Attribute() {
override fun toString(): String {
return value.toString()
}
}
data class sValue(val value: String): Attribute() {
override fun toString(): String {
return value.toString()
}
}
data class bValue(val value: Boolean): Attribute() {
override fun toString(): String {
return value.toString()
}
}
data class lValue(val value: Long) : Attribute() {
override fun toString(): String {
return value.toString()
}
}
}
Kroppeb
06/06/2020, 3:14 PMKroppeb
06/06/2020, 3:17 PMgetValue()
which might be a bug?v79
06/06/2020, 3:22 PMAny
because these will all be serialized to json.Kroppeb
06/06/2020, 3:23 PMv79
06/06/2020, 3:25 PMMark Murphy
06/06/2020, 3:26 PMdata class
defines its own toString()
which clobbers the one in Attribute
.
Here is my take:
sealed class Attribute<T>(open val value: T) {
override fun toString() = value.toString()
class fValue(override val value: Float) : Attribute<Float>(value)
class iValue(override val value: Int): Attribute<Int>(value)
class sValue(override val value: String): Attribute<String>(value)
class bValue(override val value: Boolean): Attribute<Boolean>(value)
class lValue(override val value: Long) : Attribute<Long>(value)
}
Kroppeb
06/06/2020, 3:27 PMKroppeb
06/06/2020, 3:27 PMMark Murphy
06/06/2020, 3:30 PMclass Attribute<T> private constructor(val value: T) {
override fun toString() = value.toString()
companion object {
fun of(value: Float) = Attribute(value)
fun of(value: Int) = Attribute(value)
fun of(value: String) = Attribute(value)
fun of(value: Boolean) = Attribute(value)
fun of(value: Long) = Attribute(value)
}
}