Преобразовать MutableList <Any>в MutableList <Object> - PullRequest
0 голосов
/ 29 ноября 2018

На самом деле у меня есть этот класс данных, где данные представляют собой mutableList,

data class DataTable (
    var total: Long = 0,

    @JsonProperty("data")
    var data: MutableList<Any>? = null )

Моя идея состоит в том, что, когда эти данные поступают, я могу сопоставить их с очень важной сущностью, как я мог и пытался сделать это

 val summaryOrder2= dataTable.data as  MutableList<SummaryOrder>

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

То, что вы показываете, является актером ... то, что вы, вероятно, хотите, это либо 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 для всего, что вы с ним делаете
0 голосов
/ 29 ноября 2018

В чем проблема с приведением списка?

Еще один способ добиться этого - отфильтровать экземпляр

val summaryOrder2 = dataTable.data?.filterIsInstance<SummaryOrder>()
...