Kotlin: No coinciden los types de funciones

Estoy obteniendo el siguiente error al comstackr:

Tipo no coincidente: el tipo inferido es (Cadena, Booleano) -> Cualquiera excepto ((Cadena, Booleano) -> Unidad)? era de esperarse

Mi tipo de statement es

private val ConsisFilter_Click = { filterText: String, isStrictSearch: Boolean -> try { //My Codes } catch (e: Exception) { try { alert{}.show() }catch (ignonetworking: Exception) {} } } var ConsisFilterClickEvent:((filterText: String, isStrictSearch: Boolean) -> Unit)? = null 

assigninkg como este

 inputDialog!!.ConsisFilterClickEvent = ConsisFilter_Click 

Estoy siguiendo el mismo patrón en otro lugar, pero no recibo ningún error. Solo esta pieza en particular está dando problemas. Estoy haciendo algo mal. Por favor, ayúdame.

NOTA: si puse todos los códigos de ConsisFilter_Click (código de try catch block) en una function separada y simplemente llamo a esa function desde ConsisFilter_Click entonces todo esto funciona bien

Gracias

no puede asignar ConsisFilter_Click a la variable ConsisFilterClickEvent ya que su tipo implícito es (String, Boolean) -> Any lugar de (String, Boolean) -> Unit . debido al tipo de retorno del bloque de catch es Unit pero el tipo de retorno de la última statement del try-block no es Unit , que hará que el tipo de retorno de lambda sea Any si no usas una variable de tipo explícita.

debe definir el tipo de la variable ConsisFilter_Click explícitamente como se muestra a continuación:

 val ConsisFilter_Click: (filterText: String, isStrictSearch: Boolean) -> Unit = { filterText: String, isStrictSearch: Boolean -> try { //My Codes } catch (e: Exception) { try { alert{}.show() }catch (ignonetworking: Exception) {} } } 

Cuando se usa una lambda en Kotlin, si el tipo de retorno inferido no es la Unit , se devuelve la última expresión en él . En su caso, esta es la statement try-catch, que también funciona como una expresión en Kotlin.

Si desea forzar que el tipo de devolución de su lambda sea Unit , puede escribir su tipo explícitamente como se indica en la otra respuesta, o puede asignarlo directamente a ConsisFilterClickEvent lugar de almacenarlo primero en otra variable, en ambos casos , el comstackdor se dará count de que no desea devolver su última expresión, y solo quiere usar try-catch como una statement.

Otra cosa que puede hacer es devolver explícitamente el object Unit al final de su lambda:

 private val ConsisFilter_Click = { filterText: String, isStrictSearch: Boolean -> try { ... } catch (e: Exception) { ... } Unit } 
  • IncompatibleClassChangeError: Class 'java.lang.VirtualMachineError' no implementa la interfaz 'java.lang.CharSequence'
  • Anko DSL con ArrayAdapter
  • Cómo hacer una list KOTLIN con lists de corchetes API JSON
  • ¿Es posible mezclar Scala y Kotlin en el mismo module maven?
  • ¿Cómo inyectar NativeModules no estáticos y bajo demanda en React Native Android?
  • El package de testing no lee las classs de Kotlin definidas en el package principal
  • Kotlin anonim class implementar interfaz
  • Crear class extender AsyncTask sin fugas de objects de context en Android Kotlin
  • Función de extensión booleana
  • Kotlin: ¿Cómo puede un constructor hijo usar el constructor secundario de sus padres?
  • ¿Cómo crear una variable que pueda tomar cadenas y funciones en Kotlin?