1. ホーム
  2. object

[解決済み] Kotlin クラス内のオブジェクトとコンパニオンオブジェクトの違い

2023-02-28 17:57:30

質問

kotlinのクラスにおけるオブジェクトとコンパニオンオブジェクトの違いは何ですか?

例を挙げます。

class MyClass {

    object Holder {
        //something
    }

    companion object {
        //something
    }
}

コンパニオンオブジェクトは、パラメータやメソッドがそのクラスと密接に関連している場合に使用される、と私はすでに読みました。

しかし、なぜクラス内に通常のオブジェクトを宣言する可能性もあるのでしょうか?なぜなら、それはコンパニオンと全く同じように振る舞いますが、名前を持たなければならないからです。

もしかして、その "static" (私はjava側の人間です) のライフサイクルに違いがあるのでしょうか?

どのように解決するのですか?

オブジェクトはインターフェースを実装することができます。クラス内部で、インターフェースを実装しない単純なオブジェクトを定義しても、ほとんどの場合、何のメリットもありません。しかし、様々なインターフェースを実装した複数のオブジェクトを定義すること(例えば Comparator など)は非常に便利です。

ライフサイクルの面では、コンパニオン・オブジェクトとクラスで宣言された名前付きオブジェクトの間に違いはありません。