[解決済み] Kotlin 2次コンストラクタ
2022-06-01 21:30:49
質問
Kotlinで2次コンストラクタを宣言するにはどうしたらいいですか?
それに関するドキュメントはありますか?
以下がコンパイルできません...
class C(a : Int) {
// Secondary constructor
this(s : String) : this(s.length) { ... }
}
どのように解決するのですか?
更新 : M11 (0.11.*) から Kotlin は以下のものをサポートします。 2次コンストラクタ .
今のところKotlinは一次コンストラクタのみをサポートしています(二次コンストラクタは後でサポートされるかもしれません)。
2次コンストラクタのほとんどのユースケースは、以下のテクニックの1つによって解決されます。
テクニック1. (あなたのケースを解決する) クラスの横にファクトリーメソッドを定義する。
fun C(s: String) = C(s.length)
class C(a: Int) { ... }
の使い方を説明します。
val c1 = C(1) // constructor
val c2 = C("str") // factory method
テクニック2。 (これも有効かも) パラメータにデフォルト値を定義する
class C(name: String? = null) {...}
の使い方を説明します。
val c1 = C("foo") // parameter passed explicitly
val c2 = C() // default value used
なお、デフォルト値 はどのような関数に対しても機能します。 のみならず、コンストラクタ
テクニック3. (カプセル化が必要な場合) コンパニオンオブジェクトで定義されたファクトリーメソッドを利用する
コンストラクタを非公開にして、ファクトリーメソッドだけをクライアントから利用したい場合があります。今のところ、これは コンパニオンオブジェクト :
class C private (s: Int) {
companion object {
fun new(s: String) = C(s.length)
}
}
の使い方を説明します。
val c = C.new("foo")
関連
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] Go golang、シンタックスエラー: unexpected ++, expecting :
-
[解決済み] OCamlにおける`and`キーワードの意味とは?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] コンストラクタのシグネチャを定義するインターフェース?
-
[解決済み】Kotlin Androidでデータクラスに空のコンストラクタを作成する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どなたか説明してください - for (int i = 0; i < 8; i++) [closed].
-
[解決済み] はOCamlの構文糖でbegin.endですか?
-
[解決済み] Go golang、シンタックスエラー: unexpected ++, expecting :
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] 演算子:=とは何ですか?
-
[解決済み] OCamlにおける`and`キーワードの意味とは?
-
[解決済み] 文の前の感嘆符(!)は何を意味するのですか?重複
-
[解決済み] YAMLです。YAML の文字列には引用符が必要ですか?
-
[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
-
[解決済み] Kotlin 2次コンストラクタ