Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将kotlin android中的lambda表达式用于具有两个或多个回调方法的类_Android_Lambda_Kotlin_Callback - Fatal编程技术网

如何将kotlin android中的lambda表达式用于具有两个或多个回调方法的类

如何将kotlin android中的lambda表达式用于具有两个或多个回调方法的类,android,lambda,kotlin,callback,Android,Lambda,Kotlin,Callback,让我们制作一个场景,我们在java中使用onClickListener() 我们可以在kotlin中使用lambda表达式来简化它 view.setOnClickListener({ view -> toast("Click")}) 如果我们有一个包含两个或更多回调的类或接口, 像这个:- Service.MakeApiCall(new OnCallListener() { @Override public void onSuccess(View v) { //some

让我们制作一个场景,我们在java中使用onClickListener()

我们可以在kotlin中使用lambda表达式来简化它

 view.setOnClickListener({ view -> toast("Click")})
如果我们有一个包含两个或更多回调的类或接口, 像这个:-

Service.MakeApiCall(new OnCallListener() {
  @Override
  public void onSuccess(View v) {
    //some code
  }

  @Override
  public void onError(String x){
    //some code
  }
});

在这种情况下,如OnClickListener示例,如何使用Lambda表达式是不可能的。Lambda表达式只是一个方法

有一个变通办法。您可以创建自己的扩展函数,该函数包含两个lambda:

fun Service.MakeApiCall(success: (View) -> Unit, 
                        error: (String) -> Unit) {
     MakeApiCall(object: OnCallListener {
        override fun onSuccess(v: View) {
            success(v)
        }

        override fun onError(x: String) {
            error(x)
        }
    })
}
您尝试模拟的API看起来类似于观察者模式。也许,科特林合作项目会有所帮助

lambda只能应用于功能接口。改用对象

val listener = object : OnCallListener() {
        override fun onSuccess(v: View) {
            //some code
        }

        override fun onError(x: String){
            //some code
        }
    }

您需要修复匿名类的语法。
val listener = object : OnCallListener() {
        override fun onSuccess(v: View) {
            //some code
        }

        override fun onError(x: String){
            //some code
        }
    }