下の例のようにAnyをListにキャストしようとすると、「未チェックキャスト:Any to List」の警告が表示されます。この種の問題に対する回避策はありますか?Kotlinのリストにキャストする方法は?
val x: List<Apples> = objectOfTypeAny as List<Apples>
下の例のようにAnyをListにキャストしようとすると、「未チェックキャスト:Any to List」の警告が表示されます。この種の問題に対する回避策はありますか?Kotlinのリストにキャストする方法は?
val x: List<Apples> = objectOfTypeAny as List<Apples>
これはキャストするだけで100%安全ではないという警告です。より良い選択肢は:
if (objectOfTypeAny is List<*>) {
val a: List<Apples> = objectOfTypeAny.filterIsInstance<Apples>()
...
}
詳細については、https://kotlinlang.org/docs/reference/typecasts.htmlを参照してください。
警告を無視するか(またはキャストを避けるためにデザインを改善する)以外は、いいえ。
この警告は、リストが実際にList<Apples>
ではなく、Apples
以外のものを含んでいても、実行時に成功することを意味します。
ジェネリックがJavaで統一されていないために存在します。ジェネリックスはタイプ消去で動作します。コンパイル時のセーフティネットであり、ランタイムセーフティネットではありません。
警告は削除されず、キャストはチェックされず、実際にはコンパイルされません。 –
@JBNizetはい、それは動作します。誰かを侮辱する前にまず試してみてください。 – guenhter
1.私は誰にも侮辱しませんでした。 2.私はそれを試しました: 'Error:(7、31)Kotlin:タイプの不一致:推測されるタイプはAnyですが、リストが期待されました。自分自身で参照してください:http://rextester.com/ISWQP14284 –