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") }