2017-03-12 6 views
2

、彼らは密封されたクラスのために、次の例を与える:Kotlinの封印されたクラスの中のオブジェクト宣言の目的は何ですか? Kotilnのドキュメントで

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

オブジェクト宣言(シングルトン?)こちらとしてNotANumberをdelcaringの使用でしょうか?なぜかclass NotANumber : Expr()と書いてみませんか?

答えて

5

重要な値が含まれていないため、その単一のインスタンスをどこでも再利用できます。これにより、必要な場所でこのオブジェクトの作成コストが節約されます。

これの別の例は、コトル(Kotlin)のUnitであり、ちょうどobjectでもある。

これは、ガベージコレクタがクリーンアップする必要のある不要なインスタンスを作成しないようにするための例の1つに過ぎません。もう1つの例は、Java BigIntegerクラスがZEROONEのような定数の最終的な静的フィールドを持つ方法です。これらには状態が含まれていますが、それらは不変なので、それぞれ再利用され、常に再作成する必要はありません。

+1

が表示されます。 'NotANumber'がクラスとしてマークされている場合、私はそれを参照する必要があるたびにインスタンス化する必要があります。それは今、完全な意味がある、ありがとう。 – jrahhali

関連する問題