Это хорошая практика, чтобы использовать ничего в дженериках? - PullRequest
0 голосов
/ 29 октября 2018

Как в этом примере:

sealed class Option<T>

object None : Option<Nothing>() // <-- like this

class Some<T> : Option<T>()

Или, если это не очень хорошая практика, что я должен использовать здесь вместо этого?

Есть ли официальный ответ / статья по этому поводу? Или есть какие-то аргументы, что это хорошая практика?

Я знаю, что Nothing был разработан для использования в качестве типа возвращаемого значения для функций, которые никогда не возвращают никакого значения, поэтому я не уверен, является ли допустимым использование его в качестве универсального параметра.

Я знаю, что есть статья , в которой говорится, что вы можете сделать это, но я не уверен, могу ли я доверять этому.

И автор koptional тоже использует это, но я не знаю, могу ли я доверять этому тоже.

Кроме того, похоже, что в Scala Option реализован аналогично тому, что None имеет тип Option[Nothing], а Nothing в Scala аналогичен Nothing.

Котлина.

1 Ответ

0 голосов
/ 29 октября 2018

Я согласен с комментарием @ zsmb13 . Использование Nothing в иерархии универсальных типов вполне допустимо и даже дает преимущества по сравнению с другими вариантами:

  • Во-первых, Nothing встроен в систему типов Kotlin как подтип любого другого типа, поэтому он хорошо работает с дисперсией обобщений . Например, Option<Nothing> может быть передано там, где ожидается Option<out Foo>.

  • Во-вторых, компилятор будет выполнять проверки потока управления и обнаруживать недоступный код после Nothing возвращающего вызова члена, когда тип статически известен.

См. Также: Вихревое путешествие по иерархии котлинского типа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...