Quick Answer
Covering all possible cases
Understanding the Issue
When used as an expression (returning a value), Kotlin requires when to cover all possible cases for its subject. With sealed classes/enums, the compiler can verify exhaustiveness.
The Problem
This code demonstrates the issue:
Kotlin
Error
// Problem: Non-exhaustive when
fun describe(number: Int) = when(number) {
1 -> "One"
2 -> "Two"
// No else branch
}
The Solution
Here's the corrected code:
Kotlin
Fixed
// Solution 1: Add else branch
fun describe(number: Int) = when(number) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
// Solution 2: Use sealed class
sealed class Result
class Success(val data: String) : Result()
class Error(val msg: String) : Result()
fun handle(result: Result) = when(result) {
is Success -> "Success: ${result.data}"
is Error -> "Error: ${result.msg}"
// No else needed - compiler knows all cases
}
Key Takeaways
Ensure when expressions cover all cases or use sealed classes for type safety.