在Kotlin的密封舱内进行物体声明的目的是什么?

时间:2017-03-12 19:03:57

标签: kotlin

在Kotiln文档中,他们给出了密封类的以下示例:

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

在这里使用delcaring NotANumber作为对象声明(singleton?)有什么用?为什么不写class NotANumber : Expr()

1 个答案:

答案 0 :(得分:9)

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

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

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