当前位置: 首页 > 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()}
}

相关文章:

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

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

华为OD机试真题Python实现【报数】真题+解题思路+代码(20222023)

报数 题目 一百个人围成一圈,每个人有一个编码编号从一开始到一百。 他们从一开始依次报数,报道M的人自动退出圈圈, 然后下一个人接着从1开始报数一直到剩余人数小于M。 请问最后剩余人在原先的编码为多少? 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Py…...

MacOS:Error message “error:0308010C:digital envelope routines::unsupported“

命令行&#xff1a;export NODE_OPTIONS--openssl-legacy-provider 原帖&#xff1a;https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported...

Java 异常处理,超详细整理,适合新手入门

目录 前言 抛出异常 捕获异常 处理异常 finally块 总结 前言 当Java程序中出现错误或异常时&#xff0c;通常会抛出一个异常。Java的异常处理机制使得我们可以在程序运行过程中捕获这些异常并采取相应的措施&#xff0c;以便程序能够正常运行或者优雅地停止。 抛出异常 在…...

23年了,GOPATH和go.mod 还在冲突!

现在 新配了 go环境 设置了GOROOT&#xff0c;GOPATH &#xff0c;发现引用别的包会出问题。一直会报 package XX not in GOROOT &#xff08;xxxx&#xff09;我的目录&#xff1a;我的开发目录&#xff1a; /home/fate/go_projects/老样子&#xff0c;下面有 /home/fate/go_…...

Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。(极简解决办法)

一、遇到问题。 在需要启动Redis客户端的时候&#xff0c;会发现会报这个错误。报这个错误的原因就是Redis的服务端没有开启&#xff0c;那Redis的客户端是访问不了的 二、解决办法。 1.解决的办法就是要启动服务端&#xff0c;让这个客户端可以访问到。启动服务端最简单不会…...

华为OD机试 - 优雅数组(Python)【2023-Q1 新题】

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 优雅数组 | 华为…...

【概念辨析】数组指针指针数组

目录 一、数组指针 二、指针数组 三、 数组指针的数组名不是二级指针 再来说最关键的&#xff1a;数组指针为什么不是二级指针呢&#xff1f; 代码如下&#xff1a; 四、指针数组的数组名是二级指针 在复习&#xff0c;在考试&#xff0c;在焦虑。 又一次学习到了数组指针和指针…...

python实战应用讲解-【语法基础篇】字典的创建及建模(附示例代码)

目录 创建和使用字典 函数 dict 代码清单4-1列出了创建电话簿数据库的代码。...

华为OD机试真题Python实现【分糖果】真题+解题思路+代码(20222023)

分糖果 题目 小明从糖果盒中随意抓一把糖果 每次小明会取出一半的糖果分给同学们 当糖果不能平均分配时 小明可以从糖果盒中(假设盒中糖果足够)取出一个或放回一个糖果 小明至少需要多少次(取出放回和平均分配均记一次)能将手中糖果分至只剩一颗 🔥🔥🔥🔥🔥👉�…...

视频技术基础知识

一、视频图像基础 像素&#xff1a;图像的基本单元&#xff0c;即一个带有颜色的小块分辨率&#xff1a;图像的大小或尺寸&#xff0c;用像素个数来表示。原始图像分辨率越高&#xff0c;图像就越清晰位深&#xff1a;存储每位像素需要的二进制位数&#xff1b;位深越大&#…...

Windows应用之——设置定时关机

一 概述 本文介绍window设置自动关机的两种方式&#xff1a; cmd指令设置自动关机任务计划程序设置自动关机第三方定时关机软件 二 cmd指令设置自动关机—不推荐 2.1 自动关机-开启(管理员模式下) 依次点击‘“开始”&#xff0c;在“搜索程序和文件”中输入cmd&#xff0c…...

华为OD机试真题Python实现【 喊七】真题+解题思路+代码(20222023)

喊七 题目 喊 7,是一个传统的聚会游戏, N 个人围成一圈,按顺时针从1 - 7编号, 编号为1的人从1开始喊数, 下一个人喊得数字是上一个人喊得数字+1, 但是当将要喊出数字7的倍数或者含有7的话, 不能喊出,而是要喊过。 假定N个人都没有失误。 当喊道数字k时, 可以统计每…...

国产蓝牙耳机哪个好用?国产好用的蓝牙耳机推荐

现如今&#xff0c;国产蓝牙耳机越来越受到人们关注&#xff0c;国产蓝牙耳机近几年的发展愈发迅猛&#xff0c;配置上相对于非国产蓝牙耳机来说也毫不逊色。那么&#xff0c;国产蓝牙耳机哪个好用&#xff1f;下面&#xff0c;我来给大家推荐几款好用的蓝牙耳机&#xff0c;一…...

JAVA虚拟机JVM之内存模型

内存模型 java 内存模型 很多人将【java 内存结构】与【java 内存模型】傻傻分不清&#xff0c;【java 内存模型】是 Java Memory Model&#xff08;JMM&#xff09;的意思。 关于它的权威解释&#xff0c;请参考 https://download.oracle.com/otn-pub/jcp/memory_model-1.0…...

Java线程——常见方法

一、 常见方法 1.1 概述 ① start_vs_run&#xff1a;直接调用run方法并不会启动新的线程 import cn.itcast.n2.util.FileReader; import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test") public class Test {public static void main(String[] args) {Thread t…...

机器学习:基于逻辑回归对某银行客户违约预测分析

机器学习&#xff1a;基于逻辑回归对某银行客户违约预测分析 文章目录机器学习&#xff1a;基于逻辑回归对某银行客户违约预测分析一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.逻辑回归2.业务理解3.读取数据4.数据理解5.数据准备6.逻辑回归模型训练7.模型评…...

MySQL数据库常用命令汇总(全网最全)

目录 数据库常用命令 数据库的创建 数据表的操作 表数据的增删查改 分组与函数查询 运算符&#xff1a;数学运算符 连接查询 多表查询 修改语句 删除语句 字符查询like MySQL练习 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&…...

Bulletproofs++

1. 引言 前序博客&#xff1a; Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记Bulletproofs 代码解析Bulletproofs: Shorter Proofs for Privacy-Enhanced Distributed Ledger学习笔记Bulletproofs 代码解析 Liam Eagen 2022年3月论文《Bullet…...

毕业设计(1)-AFLGO的安装

AFLGO是一个模糊测试工具&#xff0c;在CSDN上的安装教程不多&#xff0c;自己在安装过程中也出现了很多教程之外的错误&#xff0c;最后反复安装了2天终于安装成功这里记录一下安装工程中的错误 使用的平台&#xff1a;Ubuntu18.04 配置&#xff1a; 内存&#xff1a;6G&…...

IDEA中Module工程重命名的正确姿势与避坑指南

1. 为什么需要重命名Module工程&#xff1f; 在IntelliJ IDEA中开发多模块项目时&#xff0c;Module命名往往不是一蹴而就的。我遇到过很多次这样的情况&#xff1a;项目初期随便起了个module名字&#xff0c;随着业务发展发现名称与实际功能严重不符。比如有个数据分析项目&a…...

Windows 11 + Python 3.10 下,用智谱GLM-4-Flash API零成本跑通DB-GPT(保姆级避坑指南)

Windows 11 Python 3.10 下零成本跑通DB-GPT全流程指南 最近发现不少朋友对DB-GPT这个开源项目很感兴趣&#xff0c;但被复杂的部署流程和硬件要求劝退。作为过来人&#xff0c;我完全理解这种困扰——去年第一次尝试时&#xff0c;光是处理依赖冲突就花了整整两天。不过现在…...

手把手教你调用MiniMax API:快速集成聊天、语音合成到你的应用(Python示例)

手把手教你调用MiniMax API&#xff1a;快速集成聊天、语音合成到你的应用&#xff08;Python示例&#xff09; 在AI技术快速落地的今天&#xff0c;将大模型能力集成到自己的应用中已成为开发者的刚需。MiniMax作为国内领先的大模型服务提供商&#xff0c;其API平台提供了对话…...

2024年流浪星球比赛

2024年暑假&#xff0c;我去到河北参加流浪星球比赛现场人很多&#xff0c;调试的人排队很长&#xff0c;不过调试很快60分钟的时间13分钟就弄完了。拿了国一比完赛后&#xff0c;我又去北京爬长城&#xff0c;长城的确难爬&#xff0c;道路已有些坑坑洼洼很多人不讲文明在墙上…...

【2026最新】AIGC率从60%降至5%只需零成本?10款免费工具实测红黑榜,一键解锁知网自救通关

四月一到&#xff0c;查重和AIGC检测成了两座大山。 自己熬夜敲的字被判AI生成&#xff0c;或者润色后满篇通红&#xff0c;这绝望感谁懂&#xff1f; 为了搞定论文降aigc这个大坑&#xff0c;我拿手头几篇废稿&#xff0c;去市面上热门的10款降ai率工具滚了一圈。今天这篇吐…...

手把手教你用S32K SDK和TCANLINPRO调试LIN总线主从通信(附Tomoss白盒实战)

手把手构建S32KTCANLINPRO的LIN总线开发实战&#xff1a;从硬件对接到协议栈调优 LIN总线作为汽车电子领域经典的辅助网络协议&#xff0c;在车门控制、座椅调节等场景中依然占据重要地位。对于刚接触汽车电子的开发者而言&#xff0c;如何快速搭建LIN通信调试环境往往是个令人…...

TCN实战:用Python和Keras搭建时序分类模型(附MNIST代码)

TCN实战&#xff1a;用Python和Keras搭建时序分类模型&#xff08;附MNIST代码&#xff09; 时序数据分类一直是机器学习领域的核心挑战之一。传统RNN架构虽然广泛应用&#xff0c;但其训练复杂度高、并行性差的缺陷日益凸显。2018年提出的时域卷积网络&#xff08;TCN&#xf…...

LeetCode 9. 回文数:两种高效解法详解

LeetCode入门级经典题——9.回文数&#xff0c;这道题看似简单&#xff0c;却藏着两种思路截然不同的高效解法&#xff0c;尤其适合刚接触算法的小伙伴巩固基础。话不多说&#xff0c;我们直接进入正题&#xff01; 一、题目回顾 题目很简洁&#xff1a;给你一个整数 x &#x…...

Python通达信数据获取完整指南:mootdx让金融数据分析变得简单高效

Python通达信数据获取完整指南&#xff1a;mootdx让金融数据分析变得简单高效 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为获取A股市场数据而烦恼吗&#xff1f;mootdx作为一款纯Python开…...

3大核心功能解放窗口控制:Simple Runtime Window Editor全场景应用指南

3大核心功能解放窗口控制&#xff1a;Simple Runtime Window Editor全场景应用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 在数字创作的世界里&#xff0c;窗口分辨率的限制常常成为创意落地的隐形障碍…...