Как перевести Array <T?> В список <T>?

Я попробовал это:

fun <T> computeMyThing(): List<T> { val array: Array<T?> = computeArray() return array.toList() } 

Но, неудивительно, он не будет компилироваться.

Если вы уверены, что в массиве нет нулей, вы можете использовать бросок:

 array.toList() as List<T> 

Если на самом деле есть нули, вам необходимо отфильтровать их:

 array.filter { it != null } as List<T> 

Как вы можете видеть, вам все равно нужно бросить. Вы также можете написать методы расширения, которые отфильтровывают нули и возвращают правильный тип:

 fun <T> Array<T?>.filterNotNull(): List<T> { val destination = arrayListOf<T>() for (element in this) { if (element != null) { destination.add(element) } } return destination } 

Затем вы можете использовать его так:

 array.filterNotNull() 

Изменить: в Котлине уже есть метод filterNotNull . IDE не предлагала этого, потому что существует проблема с параметром типа T T и T? являются обнуляемыми. Чтобы исправить это, измените подпись метода на fun <T : Any> computeMyThing(): List<T> и вы сможете использовать array.filterNotNull() не объявляя его самостоятельно.

Intereting Posts
Можно ли переопределить Java getter (метод) с помощью Kotlin val (свойство)? Как изменить цвет фона карты, когда он выбран? Bulid JAXB классы в Gradle usin Kotlin Составление навигационных конфигураций с использованием функциональной DSL-функции Kotlin Как импортировать каталог / полный пакет в Intellij для целей тестирования В Android Studio, как мне изменить соглашения об именах Kotlin? Mapbox OfflineRegionObserver прослушиватель unregister Котлин: когда и как следует использовать выражения лямбда Kotlin делегирует собственность ленивым, это нить локальная Kotlin + Intelij + HtmlUnit: Ни одна из следующих функций не может быть вызвана с предоставленными аргументами Добавление данных в массивList из другого действия Чистая архитектура: используйте разные классы моделей для разных источников данных? Почему бы мне не сделать каждый класс класса Котлин классом данных? Как получить данные из базы данных Firebase и сохранить их в ListArray <Class>? – Котлин Не удается отправить многостраничные данные / данные формы с помощью Volley