Nothing
- это Nothing
по причине. Вы не можете вызывать какие-либо функции на нем. Кроме того, not()
применимо только для Boolean
, поэтому его нет на Nothing
. На самом деле нет никаких методов на Nothing
:
/**
* Nothing has no instances. You can use Nothing to represent "a value that never exists": for example,
* if a function has the return type of Nothing, it means that it never returns (always throws an exception).
*/
public class Nothing private constructor()
Документация в значительной степени объясняет его существование.
Хотя есть одна лазейка. Что произойдет, если вы вернете Nothing?
из функции?
fun dead(): Nothing? {
return null
}
Это верно. Он может вернуть только null
:
@JvmStatic
fun main(args: Array<String>) {
dead() // will be null
}
Я бы не сказал, что для этого есть действительный вариант использования, но это возможно.
Пример для Nothing
для обозначения небытия на деревьях:
sealed class Tree<out T>() {
data class Node<out T>(val value: T,
val left: Tree<T> = None,
val right: Tree<T> = None): Tree<T>()
object None: Tree<Nothing>()
}
Здесь Nothing
обозначает листовой узел без дочерних элементов.