Kotlin细节十六:Kotlin 的接口不支持SAM

Kotlin中 定义的 接口和 java中定义的接口区别

java中定义的接口 和方法


public interface CallBack {
    void onSuccess(int response);
    static void getCallBack(CallBack callBack){
        callBack.onSuccess(1);
    }
}

Kotlin 中定义的 接口和方法

class BodyTemperatureModel {

    interface CallBack2 {
        fun onSuccess(response: Int)
    }
    fun getCallBackDefineKotlin(callBack:CallBack2){

    }
    fun getCallBackDefineJava(callBack:CallBack){

    }

    fun test(){

        /***
         * 当Kotlin 中的 方法 用到了 Java 中定义的接口 , 可以使用 XXX接口名 + lambada 表达式来简化{ }
         */
        getCallBackDefineJava(CallBack {
            print(it)
        })

        /***
         * Kotlin代码中定义的接口不支持 SAM 替换 成 lambda 表达式
         */
        getCallBackDefineKotlin(object : CallBack2 {
            override fun onSuccess(response: Int) {

            }
        })
        /***
         * java 中定义的 方法 ,参数为 java 中定义的 接口。
         * 可以完全使用lambada 表达式来替换 。。。。
         */
        CallBack.getCallBack {
            print(it)
        }
    }
}

Kotlin object 关键字对泛型的支持

在不使用 lambda 表达式的情况下,匿名接口对象必须显示的指定泛型的类型

        Single.fromCallable {
            "Hello"
        }.subscribe(object :BiConsumer<String,Throwable>{
            override fun accept(t1: String?, t2: Throwable?) {
                TODO("Not yet implemented")
            }

        })

使用Lambda 表达式就简单多了。

Single.fromCallable {
            "Hello"
        }.subscribe { t1, t2 -> TODO("Not yet implemented") }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值