Create sealed-hierarchies-and-when.md

This commit is contained in:
Andrey Breslav
2015-03-25 13:20:23 +03:00
committed by Mikhail Glukhikh
parent f364d23ee9
commit de876a8c26
+29
View File
@@ -0,0 +1,29 @@
# Sealed Class Hierarchies and when-expressions
Goals:
* Make sealed class hierarchies possible (this implies more exhaustiveness criteria for `when`-expressions)
## Discussion
One option would be to make `when` understand hierarchies like this one:
``` kotlin
abstract class Type private () {
class Named(val name: String) : Type()
class Function(val param: Type, val result: Type): Type()
object Top: Type()
}
```
When the superclass has a private constructor, all its subclasses are known to be (directly or indirectly) nested into in,
and we can be sure that a set of `is`-checks is exhaustive if all the subclasses are included:
``` kotlin
when (type) {
is Named -> println(name)
is Function -> println("$param -> $result")
is Top -> println("TOP")
}
```