Kumaran Masilamani
05/10/2019, 7:41 PM//Given my ADT as follows ...
sealed class Result {
object Success : Result()
data class Failure(val reason: FailureReason) : Result()
enum class FailureReason { REASON1, REASON2 }
}
//I want to do something like this
when (result) {
is Success ->
is Failure(REASON1) ->
is Failure(REASON2) ->
}
In Scala I will use with a variable, but it didn't work in KotlinMike
05/10/2019, 7:45 PMswitch
SaveFailed
as an element of your Result sealed class. Typo/oversight on your part, or something I don’t understand?Kumaran Masilamani
05/10/2019, 7:48 PMSaveFailed
was a typo. Please read as Failure
<https://medium.com/sharenowtech/kotlin-adt-74472319962a>
fun showDeliveryStatus(status: DeliveryStatus) {
return when (status) {
is Preparing -> showPreparing()
is Dispatched -> showDispatched(it.trackingNumber) // note that no cast needed!
}
}
matt tighe
05/10/2019, 8:14 PMwhen (result) {
is Success -> { ... }
is Failure -> {
when (result.reason) {
REASON 1 -> { ... }
REASON 2 -> { ... }
}
}
}
sealed class Result
data class Success : Result()
sealed class Failure : Result()
data class FailureType1: Failure()
data class FailureType2: Failure()
when (result) {
is Success -> { handleSuccess(result) }
is Failure -> { handleFailure(result) }
}
fun handleFailure(failureType: Failure) {
when (failureType) {
is FailureType1 -> { … }
is FailureType2 -> { … }
}
}
Kumaran Masilamani
05/10/2019, 8:33 PM