[解決済み] なぜKotlinではJavaの静的フィールドの代わりのようなものとして「コンパニオンオブジェクト」を使うのか?
質問
コンパニオンオブジェクトの意味を教えてください。今のところ、私は、Javaの
static
が必要です。
と迷っています。
- なぜ、"companion"と呼ばれているのですか?
-
を複数作成するということでしょうか?
スタティック
プロパティの中でグループ化する必要があります。
companion object
ブロックを作成しますか? - あるクラスにスコープされたシングルトン・インスタンスを即座に作成するために、私はよく次のように書きます。
:
companion object {
val singleton by lazy { ... }
}
というのは非日常的な方法のような気がします。何かいい方法はないでしょうか?
どのように解決するのですか?
-
<ブロッククオート
コンパニオンオブジェクトの意図するところは何ですか?また、なぜコンパニオンと呼ばれるのですか?
まず、KotlinではJavaの概念である
static
メンバは、Kotlinが独自の という概念でobject
s は、シングルトン状態に関連するプロパティや関数を記述するためのものであり、Javastatic
の部分は、シングルトンでエレガントに表現することができます。そのため、「クラスに付属するオブジェクト」というネーミングになっている。その名前は、以前は
class object
とdefault object
が、その後 にリネームされました。companion object
との整合性が取れており、より明確になっています。 Scalaコンパニオンオブジェクト .ネーミングを除けば、Javaよりも強力です
static
メンバは、クラスやインターフェースを拡張することができ、他のオブジェクトと同様に参照や受け渡しができます。 -
複数の静的プロパティを作成するには、それを
companion object
ブロックの中に入っているのでしょうか?はい、それが慣用的な方法です。あるいは、意味ごとに非対象のオブジェクトにまとめることもできます。
class MyClass { object IO { fun makeSomethingWithIO() { /* ... */ } } object Factory { fun createSomething() { /* ... */ } } }
-
あるクラスにスコープされたシングルトン・インスタンスを即座に作成するために、私はよく次のように書きます。
/*...*/
というのは非日常的な方法のような気がします。何かいい方法はないでしょうか?それは、それぞれのケースで何が必要かによります。あなたのコードは、最初に呼び出されたときに初期化されるクラスにバインドされた状態を保存するのに適しています。
クラスとの連携が必要ない場合は、オブジェクト宣言で対応すればよいでしょう。
object Foo { val something by lazy { ... } }
を削除することもできます。
lazy { ... }
デリゲーション を使うと、Java の静的イニシャライザのように、最初のクラスの使用時にプロパティが初期化されるようになります。また シングルトン状態の初期化 .
関連
-
[解決済み] Kotlinの静的メソッドと変数
-
[解決済み] Kotlinのメンバー宣言に期待する
-
[解決済み] lateinit "変数が初期化されたかどうかを確認する方法は?
-
[解決済み] KotlinのMutableListを空のMutableListに初期化するには?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
-
[解決済み】「不適切なブロッキングメソッドの呼び出し」を適切にする方法は?
-
[解決済み] KotlinでJavaのstatic finalフィールドに相当するものは何ですか?
-
[解決済み] Kotlinで'by'キーワードは何をするのですか?
-
[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kotlinのメンバー宣言に期待する
-
[解決済み] Kotlinのvarとvalの違いは何ですか?
-
[解決済み] KotlinのMutableListを空のMutableListに初期化するには?
-
[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
-
[解決済み】Kotlinのダブルバング(!)演算子とは?
-
[解決済み】「不適切なブロッキングメソッドの呼び出し」を適切にする方法は?
-
[解決済み] なぜKotlinではJavaの静的フィールドの代わりのようなものとして「コンパニオンオブジェクト」を使うのか?
-
[解決済み] Kotlinで'by'キーワードは何をするのですか?
-
[解決済み] Kotlinでrun、let、apply、also、withを使うべき例
-
[解決済み] MutableLiveData。コルーチンからバックグラウンドスレッドでsetValueを実行できない