Kotlin的密封类中的对象声明的目的是什么?

在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()

由于它不包含重要价值,它的单一实例可以在任何地方重用。 这可以节省您在需要的地方创建此对象的成本。

另一个例子是Kotlin的Unit ,这也是一个object

这只是您如何避免创建垃圾收集器必须清理的不必要的实例的例子之一。 另一个例子是Java BigInteger类如何为像ZEROONE这样的常量提供最终的静态字段。 虽然它们包含状态,但它们是不可变的,所以它们可以只是一个被重用的实例,不必一直重新创建。