В проекте RX, так что работаю с ним. Интересно какие еще кейсы есть, где Optional необходим
Три основных отличия:
0. В случае с наллабилити реже приходится боксить значения. T? и T -- одно и то же в представлении JVM (кроме случая примитивов, конечно), Optional -- бокс.
1. T является подтипом T?, но T не является подтипом Optional<T>. Соответственно в функцию, ожидающую опшнл, нельзя засунуть объект без заворачивания, с наллабилити аналогичное прокатывает. Та же фигня актуальна, к примеру, для экстеншнов на наллабл ресиверах.
2. С помощью опшнлов возможно выразить Optional<Optional<T>>
, но T?
и T??
-- это одно и то же. В очень редком случае вроде необходимости выразить в джейсоне отдельно наличие значения, отдельно налл, отдельно отсутствия, в варианте с наллабилити придётся что-то придумывать.
Стоит ли последнее того, чтобы юзать опшнлы -- решать вам, конечно :)
Ну и да, если б в языке были тайпклассы, у опшнла было бы ещё одно преимущество, но в котлине это неактуально.