Let’s say I want to define a data class over a gen...
# getting-started
m
Let’s say I want to define a data class over a generic type, as part of a sealed class so that I can use it like this
Copy code
when (result) {
    is SuccessDataClassWithGenericTypeOf<MyGenericType> -> doThings(it)
    is Failed -> doFailedThings(it.failureMessage)
    is Loading -> doLoadingThings
}
Why does the type get erased in this case:
Copy code
sealed class MyResultType {
    data class SuccessDataClassWithGenericTypeOf<T>(val result: T) : MyResultType()
    object Loading : MyResultType()
    data class Failed(val failureMessage: String) : MyResultType()
}
But not in this case:
Copy code
sealed class MyResultType<out T> {
    data class SuccessDataClassWithGenericTypeOf<T>(val result: T) : MyResultType<T>()
    object Loading : MyResultType<Nothing>()
    data class Failed(val failureMessage: String) : MyResultType<Nothing>()
}
k
The type gets erased in both cases.