kotlin lambda (kotlin回调和java回调)、通用的接口以及接口默认实现

1、kotlin回调和java回调的对比

废话不多说,人狠话不多,直接撸代码:

kotlin的回调

class A{
	fun setListeren(canshu1:Int,mListen: (String?) -> Unit) {
		//费时的操作-------后调用mListen
		mListen("回调的内容")//运行到Log.d的传入监听
	}

}

class B{
	a:A=A()
	//为了更直观看到参数和回调的参数,所以多加了参数233,不要的可以省略
	a.setListeren(233){
		 Log.d(TAG, "回调内容为:$it")
	}

}

java的回调

/**
 * 按钮式回调
 */
public class B {
    public void bb() {
        new A().setmOnclickListen(new A.ClickCallback() {
            @Override
            public void clickCallback() {
                Log.d("111", "=返回到这运行=");
            }
        });
    }
}


public class A {
    private ClickCallback mCallback;
    public void aa() {
        new Handler().postDelayed(new Runnable() {
            public void run() {
                //耗时操作
                mCallback.clickCallback();//返回到B那里去运行代码
            }
        }, 2000);
    }
    //自定义回调接口
    public interface ClickCallback {
        void clickCallback();
    }
    public void setmOnclickListen(ClickCallback callback) {//构造函数中传callback进来
        this.mCallback = callback;
    }

}

2、Lambda的使用

我们用java写radiogroup的实现方式为:

	radiogroup =(RadioGroup)this.findViewById(R.id.encoding);
    radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {            
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
               //这里根据checkedId来判断选择了哪个
            }
        });

下面我们来看看使用Lambda来写:

//radioGroup是控件RadioGroup的id
radioGroup.setOnCheckedChangeListener { radioGroup: RadioGroup, checkedId: Int ->
	//这里根据checkedId来判断选择了哪个
            when (checkedId) {
                R.id.rb_4 -> {
                    Log.d("11", "选择了样式一")
                }               
            }
        }

3、 java调kotlin的Unit方法

kotlin代码如下:

fun selectResultCall(mListen: (Int) -> Unit) {
        *** = mListen
    }

java调用kotlin的selectResultCall方法

***.selectResultCall((integer) -> {
                Log.e("TAG","接收到选择的数据为");
                return null;
            });

4、使用接口(interface)回调

1.定义回调接口

interface Callback {
    fun onResult(result: String)
}

实现回调接口的类

class TaskPerformer {
    fun performTask(callback: Callback) {
        // 执行任务
        val result = "Task completed"

        // 调用回调方法
        callback.onResult(result)
    }
}

2.kotlin使用回调接口

val performer = TaskPerformer()
performer.performTask(object : Callback {
    override fun onResult(result: String) {
        // 处理回调结果
        println(result)
    }
})

3.封装一个通用的接口回调,可以放到公共模块里,在任何地方都可以使用

public interface Callback<T> {
    void accept(T result);
    void onError(Exception e);
}

kotlin写法。默认的接口实现,实现接口时候不需要每个方法都实现

open interface CallBack<T> {
    fun execute(result: T){}
    // 扫描结果回调
    fun scanResult(result: T){}
}

4.rxjava提供了一个好用的接口回调consumer,使用可以查看:
https://blog.csdn.net/wy313622821/article/details/122443098

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值