匿名内部类interfaceRequestObserver{funonSuccess(data:String)funonError(error:String)}funrequestUserInfo(requestObserver:RequestObserver){valrequestResulttrueThread{Thread.sleep(3*1000)if(requestResult){requestObserver.onSuccess(requestUserInfo 请求成功)}else{requestObserver.onError(requestUserInfo 请求失败)}}.start()}requestUserInfo(object:RequestObserver{overridefunonSuccess(data:String){Toast.makeText(context,data,Toast.LENGTH_SHORT).show()}overridefunonError(error:String){Toast.makeText(context,error,Toast.LENGTH_SHORT).show()}})匿名内部类简化funinterfaceSimpleRequestObserver{funonFinish(result:String)}funsimpleRequestUserInfo(simpleRequestObserver:SimpleRequestObserver){Thread{Thread.sleep(3*1000)simpleRequestObserver.onFinish(simpleRequestUserInfo 请求完成)}.start()}当接口只有一个抽象方法时允许使用 fun 关键字修饰接口这样可以简化实现省略 object 关键字// 冗余的写法simpleRequestUserInfo(SimpleRequestObserver{Toast.makeText(context,it,Toast.LENGTH_SHORT).show()})simpleRequestUserInfo({Toast.makeText(context,it,Toast.LENGTH_SHORT).show()})// 等价于simpleRequestUserInfo(object:SimpleRequestObserver{overridefunonFinish(result:String){Toast.makeText(context,result,Toast.LENGTH_SHORT).show()}})也可以使用 Lambda 表达式最简洁的实现simpleRequestUserInfo{Toast.makeText(context,it,Toast.LENGTH_SHORT).show()}fun 关键字无法修饰有多个抽象方法的接口funinterfaceRequestObserver{funonSuccess(data:String)funonError(error:String)}# 输出结果 Fun interfaces must have exactly one abstract method所有 Java 定义的、只有一个抽象方法的接口都可以自动用 Lambda 表达式哪怕接口不是用 fun 关键字修饰的FunctionalInterfacepublicinterfaceRunnable{publicabstractvoidrun();}Thread{println(线程运行中:${Thread.currentThread().name})}.start()