[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
2022-05-05 20:03:04
質問
そしてKotlin初心者は、「なぜ次のコードはコンパイルされないのですか?
var left: Node? = null
fun show() {
if (left != null) {
queue.add(left) // ERROR HERE
}
}
Node'へのスマートキャストは不可能で、'left'は変更可能だからです。 この時までに変更された可能性のあるプロパティ
私はそれを得る
left
はミュータブル変数ですが、私は明示的に
left != null
と
left
は、タイプ
Node
なぜその型にスマートキャストされないのでしょうか?
どうすればエレガントに修正できますか?
どのように解決するのですか?
を実行する間に
left != null
と
queue.add(left)
の値を別のスレッドが変更した可能性があります。
left
から
null
.
これを回避するためには、いくつかの選択肢があります。以下にそのいくつかを紹介します。
-
スマートキャストでローカル変数を使用する。
val node = left if (node != null) { queue.add(node) }
-
を使用します。 セーフコール のようなものを使用します。
left?.let { node -> queue.add(node) } left?.let { queue.add(it) } left?.let(queue::add)
-
を使用します。 エルビス演算子 と共に
return
から 戻る を、囲んでいる関数から早く呼び出す。queue.add(left ?: return)
なお
break
とcontinue
は、ループ内のチェックにも同様に使用できます。
関連
-
[解決済み] Kotlinのメンバー宣言に期待する
-
[解決済み] Kotlinの'let'キーワードの目的は何ですか [重複]。
-
[解決済み] Kotlinの「?:」は何をするのか?(エルビス演算子)
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] KotlinでStringをLongに変換する方法は?
-
[解決済み] なぜKotlinではJavaの静的フィールドの代わりのようなものとして「コンパニオンオブジェクト」を使うのか?
-
[解決済み] Kotlinのトライウィズリソース
-
[解決済み] '変数'が変更可能なプロパティであるため、'型'へのスマートキャストは不可能である。
-
[解決済み] Kotlinでhashmapを繰り返し処理するには?
-
[解決済み] KotlinのArrayList<String>()とmutableListOf<String>()の相違点
最新
-
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で "instanceof "クラスを確認する方法は?
-
[解決済み] lateinit "変数が初期化されたかどうかを確認する方法は?
-
[解決済み】Kotlinでコレクションを複数フィールドでソートする【重複あり
-
[解決済み】Kotlin : パブリック get プライベート set var
-
[解決済み] Kotlinでログを取るための慣用的な方法
-
[解決済み] Kotlinの複数変数let
-
[解決済み] Kotlinのfoldとreduceの違い、いつどちらを使うか?
-
[解決済み] の警告を表示します。クラスパスのKotlinランタイムJARファイルは同じバージョンでなければならない
-
[解決済み] KotlinのArrayList<String>()とmutableListOf<String>()の相違点