List
の最初または最後の項目ではないすべての項目を返す関数を記述したい(経由点)。この関数は汎用のList<*>
を入力として取得します。Kotlin:リストキャストの操作方法:チェックされていないキャスト:kotlin.collections.List <Kotlin.Any?> to kotlin.colletions.List <Waypoint>
未確認出演:kotlin.collections
fun getViaPoints(list: List<*>): List<Waypoint>? { list.forEach { if(it !is Waypoint) return null } val waypointList = list as? List<Waypoint> ?: return null return waypointList.filter{ waypointList.indexOf(it) != 0 && waypointList.indexOf(it) != waypointList.lastIndex} }
List<*>
にList<Waypoint>
を鋳造し、私は警告を受ける:リストの要素の型Waypoint
である場合、結果は返されるべきです。リスト とkotlin.colletions.List
私はそれ以外の方法を実装する方法を見つけることができません。この警告なしでこの機能を実装する正しい方法は何ですか?
グレート回答!私はlist.filterIsInstance()ソリューションを選択します。なぜなら、これは最もクリーンなソリューションだと思うからです。 –
lukle
['filterIsInstance'](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter-is-instance.html)を使用し、元のリストに異なるタイプの要素が含まれているあなたのコードはそれらを静かにフィルタリングします。時にはこれがあなたが望むものですが、時にはIllegalStateExceptionまたは同様のものが投げられることがあります。 'inline fun Iterable <*> .mapAsInstance()= map {it.apply {これはRです}}をR}' –
mfulton26
にすることに注意してください。 '.apply'はラムダの戻り値を返しません、それは受信オブジェクトを返します。オプションにnullを返す場合は、おそらく '.takeIf'を使用します。 – bj0