Sobes.tech
Back to questions
Junior — Middle
58

В каких случаях и в каком месте можно объявить подклассы, если класс помечен как sealed?

Companies where asked
amoCRMamoCRM

Answer from AI

sobes.tech AI

В Kotlin класс, помеченный как sealed, ограничивает иерархию наследования: все подклассы такого класса должны быть объявлены в том же файле, что и сам sealed класс. Это позволяет компилятору знать полный набор наследников и использовать это, например, в выражениях when без необходимости писать ветку else.

То есть подклассы sealed класса можно объявлять:

  • В том же файле, где объявлен sealed класс.
  • Внутри самого sealed класса (вложенные классы).

Пример:

sealed class Result {
    class Success(val data: String) : Result()
    class Error(val error: Throwable) : Result()
}

Или

sealed class Result

class Success(val data: String) : Result()
class Error(val error: Throwable) : Result()

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