То, что вы показываете, является актером ... то, что вы, вероятно, хотите, это либо map
, либо filterIsInstance
.
ПочемуПриведение здесь - плохая идея? Поскольку информация общего типа стирается во время выполнения ... вы можете даже сделать mutableListOf<Apple>() as List<Orange>
и, вероятно, будете шокированы во время выполнения ;-) (примечание: такие приведения также упоминаются как "непроверенные"бросает ")
Почему map
или filter
? Используйте map
, если вам нужнопреобразовать содержимое списка data
в эти объекты ... Используйте filter
(или filterIsInstance
), чтобы отфильтровать все те записи, которые соответствуют вашим критериям / предикату.
Возможно, вы захотите посмотреть ссылочную документацию.
Итак, возможные решения продемонстрировали:
data?.filterIsInstance<SummaryOrder>()
data?.filterIsInstance<SomeTransformable>()
?.map { it.toSummaryOrder() /* or whatever makes those instances a SummaryOrder */ }
Еще несколько рекомендаций:
- попытаться опустить типы списков, которые можно обнулять (разве недостаточно иметь пустой или непустой список?)
- попытаться опустить
Any
в качестве типа списка;в противном случае вам нужно использовать filterIsInstance
для всего, что вы с ним делаете