Проверьте тип ArrayList в Котлине - PullRequest
0 голосов
/ 29 ноября 2018

Kotlin предоставляет Array.isArrayOf () для проверки, относится ли массив к определенному типу.

Используется так

if(object.isArrayOf<String>())

И определяется так

/**
 * Checks if array can contain element of type [T].
 */
@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE")
public fun <reified T : Any> Array<*>.isArrayOf(): Boolean =
    T::class.java.isAssignableFrom(this::class.java.componentType)

Но это только для массива.Мне нужно проверить ArrayList.

Я думал изменить подпись следующим образом.

@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE")
public fun <reified T : Any> ArrayList<*>.isArrayListOf(): Boolean =
    T::class.java.isAssignableFrom(this::class.java.componentType)

, но class.java.componentType специфичен для Array

Как проверитькакой тип ArrayList у меня есть?

Я должен уточнить, меня интересует только один из трех типов, поэтому мне не нужен полностью открытый способ проверки.

Ответы [ 2 ]

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

Если список относится к одному типу, вы можете преобразовать список в массив, используя: toTypedArray(), а после этого вы можете проверить тип, используя: isArrayOf

Но это будет неэффективно, так как выпреобразование списка в массив, лучше, если вы можете просто угадать или получить первый элемент списка.

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

Вы не можете.Массивы являются единственным универсальным типом, для которого это возможно (поскольку они на самом деле не являются универсальными в том же смысле, Котлин просто скрывает это).

Единственное, что вы можете сделать, это посмотреть на его содержимое, нокурс

  1. , который не будет работать для пустых списков;

  2. , если список содержит, например, String, это может быть ArrayList<String>, ArrayList<CharSequence>, ArrayList<Any> и т. Д.

Для этого:

Мне нужно направить его в соответствующий метод Bundle.bundle.putStringArrayList (), bundle.putIntegerArrayList (), ect

, как я полагаю, также не должно быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...