Как проверить, является ли переменная массивом в Котлине - PullRequest
0 голосов
/ 20 февраля 2019

Мой Kotlin код

val t = cameraController.getCharacteristicInfo(myDataset[position])
if (t is Array<*>) {
     holder.keyValue.text = Arrays.toString(t)
} else {
     holder.keyValue.text = t.toString()
}

не работает.if (t is Array<*>) всегда возвращает false.

Код функции getCharacteristicInfo:

public <T> T getCharacteristicInfo(CameraCharacteristics.Key<T> key) {
    return characteristics.get(key);
}

Это функция для получения характеристик камеры.

Какправильно проверить, является ли переменная массивом?

1 Ответ

0 голосов
/ 20 февраля 2019

t is Array<*> верно для массивов объектов (Array<Whatever>), но ложно для примитивных массивов (IntArray и т. Д.).Таким образом, вы, вероятно, хотите

holder.keyValue.text = when(val t = cameraController.getCharacteristicInfo(myDataset[position])) {
    is Array<*> -> Arrays.toString(t)
    is IntArray -> Arrays.toString(t)
    ...
    else -> t.toString()
}

(если t используется снаружи, просто переместите назначение наружу).

Обратите внимание, что это разные Arrays.toString перегрузки, поэтому вы не могли написать

is Array<*>, is IntArray, ... -> Arrays.toString(t)

, даже если в этой ситуации были доступны умные приведения (они не доступны).

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