对于一个声明了多个方法的接口,我们使用的时候有时仅仅关注于几个关键方法,并不需要实现所有的。可是由于接口调用的语法限制,使得我们不得不在代码中也显示声明实现了那些我们不关心的方法。在Java中也有简化接口调用的方式,比如安卓中ViewPager监听页面切换时的接口PageChangeListener,官方提供了简单类: ViewPager.SimpleOnPageChangeListener来简化调用。

对于Kotlin来说,可以类似使用java的方式,来实现多函数接口的简化调用,只是要用到object关键字且代码仍会较多。这里,由于Kotlin的语法更为灵活,去实现这种调用应该有其特色的方式,使得代码更少,且更加具有张力。
来个小例子,先简单介绍类似java实现多函数接口的简化调用,一是展示什么是简化接口调用,二是做对比。这里得例子都用kotlin写的。
1.声明接口CallBack 和调用类Worker
interface CallBack {
fun onSuccess(str: String)
fun onFailure(code: Int)
}
class Worker {
var callback: CallBack? = null
fun done(str: String) {
callback?.onSuccess(str)
}
fun fail(code: Int) {
callback?.onFailure(code)
}
fun setCallBack(lis: CallBack) {
callback = lis;
}
}
2.直接调用接口,使用了object关键字 ,此时假设不关心success方法,但必须显示声明。
Worker().apply {
setCallBack(object : CallBack {
override fun onSuccess(str: String) {
}
override fun onFailure(code: Int) {
toast("$code")
}
})
}.fail(110)
//结果:吐司:110
3.Java风格简化调用,声明简化类SimCallBack
public class SimCallBack implements CallBack{
@Override
public void onSuccess(@NotNull String str) {
}
@Override
public void onFailure(int code) {
}
}
4.Java风格简化调用的展示,不关心的onSuccess不用再显示声明
Worker().apply {
setCallBack(object : SimCallBack() {
override fun onFailure(code: Int) {
super.onFailure(code)
toast("$code")
}
})
}.fail(110)
上述带着浓浓java味道的调用,不仅代码风格比较混杂,而且代码显得冗余。重点来了,Kotlin怎么去克服上面两点呢。看例子。
1.还是CallBack接口,不过其简化类需要用Kotlin风格来做:
class SimpleCallBack : CallBack{
private var _OnSucess: ((str: String) -> Unit)? = null
fun success(listener: (str: String) -> Unit) {
_OnSucess = listener
}
override fun onSuccess(str: String) {
_OnSucess?.invoke(str)
}
private var _OnFailure: ((code: Int) -> Unit)? = null
override fun onFailure(code: Int) {
_OnFailure?.invoke(code)
}
fun fail(listener: (code: Int) -> Unit) {
_OnFailure = listener
}
}
声明了两个函数类型变量 _OnSucess和 _OnFailure,作用就是内部将原来的大接口CallBack分解。然后声明了对应的方法success和fail,目的是给变量小接口赋值。接着就是原接口方法的处理,比如原接口方法onSuccess(str: String)的操作 _OnSucess?.invoke(str),目的是实现接口回调结果的转移。做这些,目的就是为以后的简化调用做准备。
2.调用类Worker 也是要进行处理一下的,代码基本同原来的那些,只是增加了以下方法。注意,若不是为了兼容java方式,原setCallBack可以不再声明,直接赋值就好,由此,新增方法可以看做是原setCallBack方法的替换。
fun setCallBacker(listener: SimpleCallBack.() -> Unit) {
var ca = SimpleCallBack()
ca.listener()
setCallBack(ca)
}
注意名称。本方法接受一个函数参数,方法的作用是内部生成一个简化接口对象SimpleCallBack,然后再让调用类注册到接口。然后执行传进来的函数参数,为什么要这样呢,是为了使用kotlin语法中灵活的闭包{}。另外,配上强大的函数扩展语法,不改变原有类,增加个这种方法还是比较容易的。
3.最后看看调用方式吧:
Worker().apply {
setCallBacker {
success { toast(it) }
fail { }//若不需要,可以不显示声明
}
}.done("完成")
//结果:吐司:完成
最后结果可以看出,当调用多函数接口CallBack时,并不需要再声明接口,而是直接在闭包里声明想要使用的方法,然后在对应的方法闭包里执行操作即可。风格完全是kotlin,且使用特别简便。
分享结束,希望对读者有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Kotlin多函数接口调用
# Kotlin函数接口调用
# Kotlin接口调用
# Kotlin基础教程之dataclass
# objectclass
# use函数
# 类扩展
# socket
# Kotlin语法学习-变量定义、函数扩展、Parcelable序列化等简单总结
# Kotlin中let()with()run()apply()also()函数的使用方法与区别
# Kotlin中标准函数run、with、let、also与apply的使用和区别详解
# Kotlin 内联函数详解及实例
# 玩转Kotlin 彻底弄懂Lambda和高阶函数
# 详解Kotlin 高阶函数 与 Lambda 表达式
# Kotlin基础教程之Run
# 标签Label
# 函数Function-Type
# Kotlin基础教程之函数定义与变量声明
# Kotlin函数默认值的完全讲解
# 不关心
# 若不
# 包里
# 是为了
# 几个
# 来了
# 也有
# 带着
# 多个
# 目的是
# 一是
# 就好
# 要用
# 较多
# 可以看出
# 中也
# 不需
# 来做
# 来个
# 都用
相关文章:
网站制作难吗安全吗,做一个网站需要多久时间?
深圳网站制作的公司有哪些,dido官方网站?
宝塔建站助手安装配置与建站模板使用全流程解析
建站之星如何快速更换网站模板?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
C#怎么创建控制台应用 C# Console App项目创建方法
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何用免费手机建站系统零基础打造专业网站?
高防服务器租用如何选择配置与防御等级?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何通过NAT技术实现内网高效建站?
焦点电影公司作品,电影焦点结局是什么?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何选择服务器才能高效搭建专属网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
如何快速完成中国万网建站详细流程?
如何用虚拟主机快速搭建网站?详细步骤解析
如何在阿里云购买域名并搭建网站?
为什么Go需要go mod文件_Go go mod文件作用说明
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
图册素材网站设计制作软件,图册的导出方式有几种?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
建站之星代理费用多少?最新价格详情介绍
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
安云自助建站系统如何快速提升SEO排名?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何访问已购建站主机并解决登录问题?
Thinkphp 中 distinct 的用法解析
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何解决ASP生成WAP建站中文乱码问题?
建站ABC备案流程中有哪些关键注意事项?
如何用PHP工具快速搭建高效网站?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何用PHP快速搭建CMS系统?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站主机选购指南:核心配置优化与品牌推荐方案
设计网站制作公司有哪些,制作网页教程?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何通过wdcp面板快速创建网站?
Android使用GridView实现日历的简单功能
建站之星如何实现PC+手机+微信网站五合一建站?
利用JavaScript实现拖拽改变元素大小
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
*请认真填写需求信息,我们会在24小时内与您取得联系。