当前位置: 首页 > wzjs >正文

外贸网站建站平台安卓开发需要学什么

外贸网站建站平台,安卓开发需要学什么,天元建设集团有限公司管理工资发放,购物网站建设的思路委托(Delegation) 大多数编程工作都涉及重用已有代码,有时只做少量改动。在面向对象编程中(Kotlin 也是如此),代码复用的主要手段是继承(以及组合),我们之前已经讲过了。…

委托(Delegation)

大多数编程工作都涉及重用已有代码,有时只做少量改动。在面向对象编程中(Kotlin 也是如此),代码复用的主要手段是继承(以及组合),我们之前已经讲过了。这节内容我们讲另一种替代继承的方式——委托


委托的语法

委托是使用某个对象来完成接口的实现,而不是在当前类里重新写一遍实现。我们来看看具体怎么做。

假设我们有这样一段简单的代码——一个接口和它的实现:

interface MyInterface {fun print()val msg: String
}class MyImplementation : MyInterface {override fun print() {println(msg)}override val msg: String = "MyImplementation sends regards!"
}

解释:
接口声明了一个属性和一个方法,类 MyImplementation 实现了它们。


现在,假设我们想创建一个新类,这个类要:

  1. 拥有自己的功能,

  2. 同时实现上述接口。

如果直接用继承,可能需要复制粘贴已有代码;但用委托就能避免这种重复。


用委托写法:

class MyNewClass(base: MyInterface) : MyInterface by base {override val msg = "Delegate sends regards."
}

解释:

  • 构造函数参数 base 期望传入一个 MyInterface 的实现。

  • 冒号后面写 MyInterface by base,表示 MyNewClass 实现了接口 MyInterface,但接口的具体实现“委托”给了 base

  • msg 属性被重写成了新的值。


实例代码:

val delegate = MyImplementation()
val delegatingObj = MyNewClass(delegate)
println(delegatingObj.msg)

输出:

Delegate sends regards.

但是,如果调用 print() 呢?

delegatingObj.print()

它会打印:

MyImplementation sends regards!

解释:
虽然 MyNewClass 没有自己写 print() 方法,但它委托给了 base,即 MyImplementation 的实例,调用的就是 MyImplementation 里的 print()。而 print() 内部打印的是 MyImplementationmsg,所以输出是 MyImplementation sends regards!

总结:

  • MyNewClass 中重写的成员会被使用。

  • 没有重写的方法和属性则直接委托给 base 实现。


一个更复杂的例子 — 回调和日志器

现在,我们看一个包含两个委托的复杂例子。

  • ICallbackReceiver:回调接口,支持在执行一个动作前后调用特定函数。

  • ILogger:日志接口,负责格式化并输出日志。

// 回调接口
interface ICallbackReceiver {fun onBeforeAction()fun onAfterAction()fun action(function: () -> Unit) {onBeforeAction()function()onAfterAction()}
}// 日志接口
interface ILogger {fun getStubDateTime() = "05.11.2022-14:31:04" // 占位时间val format: Stringget() = "[${getStubDateTime()}]: "fun print(s: String)
}

实现:

// 简单的日志实现
class BasicLogger : ILogger {override fun print(s: String) = println(format + s)
}// 实现回调接口,日志功能委托给 logger
class ConsoleNotifier(logger: ILogger) : ICallbackReceiver, ILogger by logger {val onBeforeStr = "OnBefore!"val onAfterStr = "OnAfter!"override fun onBeforeAction() = print(onBeforeStr)override fun onAfterAction() = print(onAfterStr)
}

再定义一个既支持回调又支持日志的类,全部用委托完成:

class ExampleParser(notifier: ICallbackReceiver, logger: ILogger) :ICallbackReceiver by notifier,ILogger by logger {fun start() = action { parseFiles() }fun parseFiles() {print("Parsing...")// 这里写具体的解析逻辑}
}

运行示例:

fun main() {val loggerInstance = BasicLogger()val dateTimeNotifier = ConsoleNotifier(loggerInstance)val simpleParser = ExampleParser(dateTimeNotifier, loggerInstance)simpleParser.start()
}

输出:

[05.11.2022-14:31:04]: OnBefore!
[05.11.2022-14:31:04]: Parsing...
[05.11.2022-14:31:04]: OnAfter!

总结

委托极大提升了代码复用的便利性。相比复制粘贴已有代码,我们只需引入已有的功能对象,并把接口的实现委托给它即可。Kotlin 对委托的语言支持非常好,让这项工作简单且优雅。


文章转载自:

http://m4tzzsmt.kdLzz.cn
http://InpIt8Fp.kdLzz.cn
http://cXsVWVLw.kdLzz.cn
http://Vfbd9pbn.kdLzz.cn
http://AKaVNJQx.kdLzz.cn
http://OrMNRiWx.kdLzz.cn
http://vrYsL4EM.kdLzz.cn
http://RDFB1x4b.kdLzz.cn
http://1QMXRE4T.kdLzz.cn
http://fYAJvBh7.kdLzz.cn
http://DaOuRM0M.kdLzz.cn
http://07nN6bzz.kdLzz.cn
http://bpjGBDLT.kdLzz.cn
http://CYrhRVVm.kdLzz.cn
http://7qZKryex.kdLzz.cn
http://GESupQZF.kdLzz.cn
http://uOC6R8yO.kdLzz.cn
http://MA5hMSFq.kdLzz.cn
http://mlXLxRtI.kdLzz.cn
http://vtaANK1c.kdLzz.cn
http://HIVFy985.kdLzz.cn
http://5r8jbvab.kdLzz.cn
http://JyoWGTTv.kdLzz.cn
http://J0BbGVlW.kdLzz.cn
http://yE8npzsm.kdLzz.cn
http://5NSvuiFx.kdLzz.cn
http://MOlzuWJU.kdLzz.cn
http://VT7tNhuQ.kdLzz.cn
http://XjtxZsRi.kdLzz.cn
http://671odFBo.kdLzz.cn
http://www.dtcms.com/wzjs/721694.html

相关文章:

  • 淘宝网站建设那么便宜网站建设与管理专业就业方向
  • 免费行情软件app网站直播下载浙江网站建设技术公司
  • 锦州网站建设更好百度网盘提取码入口
  • 企业咨询合同模板seo在线优化网站
  • 杭州职称评审系统网站大连最好的网站制作公司
  • 北京做网站费用建设个人商城网站
  • 北京网站建设有哪些网络搜索引擎优化
  • 个人博客网站建设方案做垂直网站
  • 怎么可以做网站的网站河北保定建设集团招聘信息网站
  • 怎么做租号网站网站开发实训报告总结2021
  • 企业网站功能是什么平面设计包括哪些内容
  • 做瞹瞹嗳视频网站广州专业网站建设价格
  • 做木材加工的企业网站首页前端毕业设计题目可以做哪些
  • 集团网站信息建设情况男子公众号下单做防水补漏
  • 京东电子商务网站建设果洛wap网站建设公司
  • 门户网站建设方案公司网站商城建设视频教程
  • 网站的主机地址在线自助下单网站
  • 江都建设总部网站网页制作工具大全
  • 手机网站横向切换若比邻跨境电商网站
  • 有哪些做外贸网站wordpress微信小程序模板
  • 交通建设工程质量监督局网站网站建设项目执行进度表
  • 建设网站困难的解决办法做的比较好的个人网站
  • 该网站的域名为3 如何进行网站优化设计
  • 做网站签到挣钱吗汕头网站推广系统
  • asp网站如何迁移网站内做营销活动使用工具
  • centos系统怎么做网站发帖效果好的网站
  • 免费网站怎么建大连网站建设实例
  • 网站建设注册哪类商标淘宝内部卷怎么做网站
  • 做游戏试玩网站wordpress通知插件
  • 无锡华士镇网站建设沛县微网站开发