Kotlin: закрытый класс не может «содержать» классы данных? Зачем?

Хорошо, теперь, когда Котлин официально вышел из игры, и я снова начинаю играть с ним, я совершенно смущен тем, что мне нужно выбирать между преимуществами sealed и data но как-то не может быть и того, и другого.

Это, например, кажется мне полезным, но не компилируется:

 sealed class Expr { data class Const(val number: Double) : Expr() data class Sum(val expr1 : Expr, val expr2 : Expr) : Expr() } 

потому что классы данных не могут распространять другие классы.

Есть что-то, чего я не хватает?

Незадолго до того, как вы вошли в состояние Beta, команда Kotlin решила добавить определенные ограничения на использование классов data ( см. Этот пост ) из-за проблем, которые они вызвали в иерархиях классов.

Одно из ограничений заключается в том, что класс data не должен подтипировать другой класс, допускаются только интерфейсы. Следовательно, классы data не могут быть получены из sealed class .

Это было необходимой мерой, чтобы избежать дальнейшего отсрочки выпуска 1.0. Некоторые из ограничений, как говорили, были сняты в будущих выпусках, как только проблемные случаи будут тщательно пересмотрены, и будет найдено хорошее дизайнерское решение.

Intereting Posts
Kotlin: @JvmStatic метод NoClassDefFoundError / ClassNotFoundException во время модульного теста Intellij IDEA отладчик не работает над проектом Gradle Vert.X IDEA показывает проект дважды в дереве Каковы ограничения на динамическую / двойную отправку в Котлин? Использование функции Kotlin как типа Java SAM Создать класс расширить AsyncTask без утечки контекстного объекта в Android Kotlin Получение текущего класса Идентификация Котлина не работает должным образом Kotlin: как параметр по умолчанию в «fun main (parameters: Array <String>)» печатает «гость» без присвоения каких-либо значений Kotlin Pass в типе, который реализует параметризованный интерфейс Android: Kotlin TypeCastException: null не может быть применено к ненулевому типу kotlin.String Обновление представления Recycler и создание Parcelables для вращения экрана (что здесь лучше всего подходит?) Как сбросить содержимое просмотра ресайклера при вызове с помощью Kotlin ViewPager ImageView не отображается в фрагменте Kotlin Constructor Crash