2017-07-14 7 views
0

下の例のようにAnyをListにキャストしようとすると、「未チェックキャスト:Any to List」の警告が表示されます。この種の問題に対する回避策はありますか?Kotlinのリストにキャストする方法は?

val x: List<Apples> = objectOfTypeAny as List<Apples> 

答えて

3

これはキャストするだけで100%安全ではないという警告です。より良い選択肢は:

if (objectOfTypeAny is List<*>) { 
     val a: List<Apples> = objectOfTypeAny.filterIsInstance<Apples>() 
     ... 
} 

詳細については、https://kotlinlang.org/docs/reference/typecasts.htmlを参照してください。

+0

警告は削除されず、キャストはチェックされず、実際にはコンパイルされません。 –

+0

@JBNizetはい、それは動作します。誰かを侮辱する前にまず試してみてください。 – guenhter

+0

1.私は誰にも侮辱しませんでした。 2.私はそれを試しました: 'Error:(7、31)Kotlin:タイプの不一致:推測されるタイプはAnyですが、リストが期待されました。自分自身で参照してください:http://rextester.com/ISWQP14284 –

2

警告を無視するか(またはキャストを避けるためにデザインを改善する)以外は、いいえ。

この警告は、リストが実際にList<Apples>ではなく、Apples以外のものを含んでいても、実行時に成功することを意味します。

ジェネリックがJavaで統一されていないために存在します。ジェネリックスはタイプ消去で動作します。コンパイル時のセーフティネットであり、ランタイムセーフティネットではありません。

関連する問題