Aparece el error "No coinciden los types" cuando uso una function como parámetro en Kotlin.

Espero utilizar la function AA como el parámetro de la function BB en el siguiente código, pero obtengo los dos errores.

Error 1: espero asignar el resultado de la function cc a dd, pero fallé.

Error 2: espero invocar la function BB, pero el parámetro AA (3) es incorrecto.

¿Cómo puedo corregir los errores? ¡Gracias!

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) BB(1,AA(3)); //Error 2 } fun AA(aa:Int): Int{ return aa+10 } fun BB(bb:Int, cc:(Int) -> Int){ val dd:Int=cc(Int); //Error 1 Toast.makeText(getApplicationContext(), bb+dd, Toast.LENGTH_LONG).show(); } } 

Su syntax de Kotlin es incorrecta.

Cómo lo has escrito, el método BB sería:

fun BB(bb: Int, cc: Int) {

Lo que estás pasando BB es el RESULTADO de la function AA (también conocido como: un Int ).

En otras palabras, ¿por qué está recibiendo una function (AA) dentro (BB) si ya está invocando la function cuando llama "BB"? Como AA toma un Int y devuelve un Int, la firma de la function BB espera solo dos inputs. La llamada a AA(Int) sucedió en su línea ERROR 2 .

No está claro lo que intenta hacer (dado el código de su Toast), pero puede usar las references de TypeAlias ​​& Bound como esta:

 typealias SomeType = (Int) -> Int class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val a = this::AA // Save a Bound Reference to the function. BB(1, a) // Call BB and pass a value and a function } fun AA(aa: Int): Int { return aa + 10 } fun BB(bb: Int, cc: SomeType) { val dd = cc(bb) // call `cc` which is really `AA(Int) -> Int` Toast.makeText(getApplicationContext(), dd, Toast.LENGTH_LONG).show() } } 

testing esto.

 fun AA(aa: Int): Int { return aa + 10 } fun BB(bb: Int, cc: Int) { val dd: Int = cc Toast.makeText(getApplicationContext(), bb + dd, Toast.LENGTH_LONG).show() } 
  • ¿Cuál es la forma oficial / correcta de crear la entidad y el file Dao al usar kotlin?
  • ¿Es la mejor manera de usar lateinit?
  • ¿Hay alguna manera de cambiar mi método a la stream Observable que será una cadena de modificadores?
  • Cómo devolver una interfaz como javawith Kotlin
  • ¿Cómo implementar el patrón de layout de método de plantilla en Kotlin?
  • Tipo de parámetro Kotlin no coincide
  • ¿Es posible aplicar una sola anotación a múltiples objectives de sitio de uso en Kotlin?
  • Moshi en Android Kotlin - ENUM como key MutableMap que se convierte en String cuando se desexcita
  • ¿Cómo crear proxy dynamic / transparente en Kotlin?
  • COROUTINE_SUSPENDED y suspendCoroutineOrReturn en Kotlin
  • Click listener en ViewHolder solo responde a veces