mi codigo kotlin es
val t = cameraController.getCharacteristicInfo(myDataset[position]) if (t is Array<*>) { holder.keyValue.text = Arrays.toString(t) } else { holder.keyValue.text = t.toString() } No está funcionando. if (t is Array<*>) siempre devuelve false .
El código de la función getCharacteristicInfo es:
public <T> T getCharacteristicInfo(CameraCharacteristics.Key<T> key) { return characteristics.get(key); }Es una función para obtener las características de la cámara.
¿Cómo verificar correctamente si una variable es una matriz?
t is Array<*> es verdadero para matrices de objetos ( Array<Whatever> ), pero falso para matrices primitivas ( IntArray etc.). Así que probablemente quieras
holder.keyValue.text = when(val t = cameraController.getCharacteristicInfo(myDataset[position])) { is Array<*> -> Arrays.toString(t) is IntArray -> Arrays.toString(t) ... else -> t.toString() } (si t se usa afuera en otro lugar, simplemente mueva la asignación afuera).
Tenga en cuenta que se trata de sobrecargas diferentes Arrays.toString , por lo que no podría escribir
is Array<*>, is IntArray, ... -> Arrays.toString(t)incluso si los lanzamientos inteligentes estuvieran disponibles en esta situación (no lo están).
Enfrentó el mismo problema y usó isArray of the Class :
>>> arrayOf("a","b","c")::class.java.isArray res1: kotlin.Boolean = true >>> IntArray(1)::class.java.isArray res2: kotlin.Boolean = true >>> Array<String>(1) { "a" }::class.java.isArray res3: kotlin.Boolean = true >>> Any::class.java.isArray res4: kotlin.Boolean = falseNOTA: Es posible que no esté disponible si su objetivo no es JVM.