让我们假设我们在Java中有onClickListener()
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Click", Toast.LENGTH_SHORT).show();
}});
我们可以在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
}
});
在这种情况下如何使用Lambda表达式,例如OnClickListener示例
答案 0 :(得分:1)
Lambda只能应用于功能接口。改用对象
val listener = object : OnCallListener() {
override fun onSuccess(v: View) {
//some code
}
override fun onError(x: String){
//some code
}
}
答案 1 :(得分:0)
不可能。 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看起来类似于Observer模式。 Kotlin协程可能会帮助您 https://kotlinlang.org/docs/reference/coroutines-overview.html