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

Kotlin-委托、代理和单例对象

委托和代理

实现委托和代理,使用的是by关键字。
这里设计一个场景:假设某个演员被要求唱歌,但是不会唱歌,就委托一个会唱歌的歌手在后台唱歌。
如何实现这个需求,下面就开始直接写代码
首先定义一个唱歌能力接口

interface Ising {fun singing()
}

然后创建一个歌手对象,实现这个唱歌接口

class SingerA:Ising {override fun singing() {println("歌手甲正在努力唱歌")}
}

然后在定义一个演员对象,并且用by关键字委托歌手唱歌。

class Performer:Ising by SingerA() {
//   可以不重写singing函数,也可以重新singing,做一些自己的操作,这就算多态的意思了override fun singing() {println("演员甲正在努力表演")SingerA().singing()}
}

下面在main函数调用演员的唱歌

fun main(args: Array<String>) {val performer = Performer()performer.singing()
}
//运行结果为:
//演员甲正在努力表演
//歌手甲正在努力唱歌

object关键字-单例对象

上面的代码有一个坑,重写的时候SingerA().singing()这种调用方式,就等于又创建了一个新的歌手对象调用了唱歌函数。
Kotlin提供了一个关键字object。用object关键字代替class声明对象,这个对象就是单例的,也就是编译运行的时候直接在内存创建了一个全局唯一的对象。
下面是使用object定义对象的代码:

object SingerA:Ising {override fun singing() {println("歌手甲正在努力唱歌")}
}

因为歌手对象使用了object声明,所以委托歌手的时候就不能带括号了
下面是委托歌手需要修改的代码

class Performer:Ising by SingerA {override fun singing() {println("演员甲正在努力表演")SingerA.singing()}
}
http://www.lryc.cn/news/17104.html

相关文章:

  • 华为OD机试真题Python实现【报数】真题+解题思路+代码(20222023)
  • MacOS:Error message “error:0308010C:digital envelope routines::unsupported“
  • Java 异常处理,超详细整理,适合新手入门
  • 23年了,GOPATH和go.mod 还在冲突!
  • Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。(极简解决办法)
  • 华为OD机试 - 优雅数组(Python)【2023-Q1 新题】
  • 【概念辨析】数组指针指针数组
  • python实战应用讲解-【语法基础篇】字典的创建及建模(附示例代码)
  • 华为OD机试真题Python实现【分糖果】真题+解题思路+代码(20222023)
  • 视频技术基础知识
  • Windows应用之——设置定时关机
  • 华为OD机试真题Python实现【 喊七】真题+解题思路+代码(20222023)
  • 国产蓝牙耳机哪个好用?国产好用的蓝牙耳机推荐
  • JAVA虚拟机JVM之内存模型
  • Java线程——常见方法
  • 机器学习:基于逻辑回归对某银行客户违约预测分析
  • MySQL数据库常用命令汇总(全网最全)
  • Bulletproofs++
  • 毕业设计(1)-AFLGO的安装
  • 基于Opencv的缺陷检测任务
  • Android Gradle脚本打包
  • 平滑KDJ指标公式,减少无效金叉死叉
  • 大势前瞻!文旅还是短视频,你弯道超车风口在这了
  • JAVA基础常见面试题
  • 通过一张照片来定位拍摄地点和网站的域名 LA CTF 2023
  • SpringBoot(powernode)(内含教学视频+源代码)
  • TEMU联盟计划用意何在?做推广达人真的能收入满满吗?
  • 【概念辨析】二维数组传参的集中可能性
  • Photon Vectorized Engine 学习记录
  • webRTC学习-基础知识