Emitir no seleccionado al lanzar un object de tipo Cualquiera? en una lambda en kotlin

Mi código funciona según lo previsto, pero tengo curiosidad sobre por qué existe la siguiente advertencia:

¡echa cualquier! a lambda

¿Es seguro ignorar la advertencia? Sé que Kotlin no puede verificar los types borrados en el time de ejecución, pero no es el object más genérico (a nivel) en Kotlin.

Lo que estoy buscando es una forma de verificar si un object es del tipo "lambda". Por cierto: ¿Alguno? -> ¿Alguno? tampoco se deshace del problema.

La JVM le proporciona solo el tipo sin procesar en el time de ejecución, por ejemplo, java.lang.List lugar de java.lang.List<String> . Esto también se aplica a kotlin lambdas: cuando escribe (Any?) -> Unit en kotlin, se traduce a la JVM tipo kotlin.jvm.functions.Function1<java.lang.Object, kotlin.Unit> .

Ahora, tienes un object de tipo Any? . Puedes escribir Any? as? Function1<*, *> Any? as? Function1<*, *> Any? as? Function1<*, *> sin ningún problema. También puedes usar as lugar de as? , pero se arriesga a que se ClassCastException una ClassCastException .

Pero ahora viene el problema: el tipo (Any?) -> Unit y (Int) -> String son types diferentes en time de compilation, pero solo por sus arguments de tipo genérico. En el time de ejecución, ambos son instancias de la Function1 , que es la razón por la cual el comstackdor emitirá una advertencia cuando lo lances a cualquier cosa con arguments generics que no sean * .

¿Es seguro ignorar la advertencia?

Si sabes lo que estás haciendo, sí, es solo la limitación del lenguaje Java. Si puede confiar en que el tipo es lo que espera, no hay ningún error, sin embargo, no obtendrá ninguna exception si los arguments generics son diferentes de lo que espera.

Si no sabe lo que está haciendo, por ejemplo, obteniendo el parámetro del código que no puede controlar, tome esta advertencia en serio.

  • Configuración de oyentes de Android en Kotlin: uso del retorno en lambdas
  • ¿Cómo escribir lambdas con generics en kotlin?
  • Kotlin - Lista dentro de un filter de list
  • Implementación de interfaz de retorno con Kotlin y lambda
  • Enlace de datos: el campo Observable con valor lambda no comstack
  • ¿Es posible ocultar variables del cierre de lambda?
  • ¿Utilizas return dentro de una lambda?
  • `break` y` continue` en `forEach` en Kotlin
  • Kotlin lambda con varios parameters
  • java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 en Kotlin
  • Reescriba el código de Java en Kotlin utilizando la reference de function.