Какова цель Декларации объекта внутри герметичного класса в Котлине?

В документации Kotiln они приводят следующий пример для закрытых классов:

sealed class Expr { class Const(val number: Double) : Expr() class Sum(val e1: Expr, val e2: Expr) : Expr() object NotANumber : Expr() } 

Каким будет использование деления NotANumber как объявления объекта (singleton?) Здесь? Почему бы просто не написать class NotANumber : Expr() ?

Solutions Collecting From Web of "Какова цель Декларации объекта внутри герметичного класса в Котлине?"

Поскольку он не содержит значимого значения, единственный экземпляр его может быть использован повсеместно. Это экономит вам стоимость создания этого объекта там, где вам это нужно.

Другим примером этого может быть Unit Котлина, которое также является просто object .

Это всего лишь один из примеров того, как вы можете избежать создания ненужных экземпляров, которые сборщик мусора затем должен очистить. Другим примером может служить то, как класс Java BigInteger имеет конечные статические поля для констант, таких как ZERO и ONE . Хотя они содержат состояние, они неизменяемы, поэтому они могут быть только одним экземпляром, каждый из которых используется повторно, и его не нужно постоянно воссоздавать.