在Kotlin中,object: 用于声明匿名对象(Anonymous Object),这是实现接口或继承类的轻量级方式,无需显式定义具名类。以下是核心用法和场景:


1. 基本语法

val obj = object : SomeInterface {  // 实现接口override fun method() { ... }
}val obj2 = object : SomeClass() {   // 继承类override fun method() { ... }
}

2. 典型用途

(1) 实现接口/抽象类的临时实例
interface ClickListener {fun onClick()
}button.setOnClickListener(object : ClickListener {override fun onClick() {println("Button clicked")}
})
(2) 重写类方法(类似Java匿名内部类)
val thread = object : Thread() {override fun run() {println("Running in anonymous Thread")}
}
thread.start()
(3) 作为表达式返回值
fun createAdder(x: Int) = object {fun add(y: Int) = x + y
}val adder = createAdder(5)
println(adder.add(3))  // 输出 8

3. 与伴生对象(companion object)的区别

特性object:(匿名对象)companion object
作用域临时单例(无类名)类内部的静态单例
生命周期随引用结束而回收伴随类加载存在
典型场景回调、临时实现工厂方法、类级常量

4. 注意事项

  • • 匿名对象非单例:每次调用 object: 会创建新实例。
  • • 访问外部变量:可直接修改捕获的局部变量(与Java不同):
    fun countClicks(button: Button): Int {var clicks = 0button.setOnClickListener(object : ClickListener {override fun onClick() {clicks++  // 直接修改外部变量}})return clicks
    }

5. 实际应用场景

  • • Android点击事件(替代Java匿名内部类)
  • • 快速实现回调接口
  • • 单元测试中的模拟对象(Mock)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87059.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87059.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87059.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js代码04

题目 非常好。我们刚刚看到了回调函数在处理多个异步操作时会变得多么混乱(回调地狱)。为了解决这个问题,现代 JavaScript 提供了一个更强大、更优雅的工具:Promise。 Promise,正如其名,是一个“承诺”。…

Jenkins初探-通过Docker部署Jenkins并安装插件

简介 本文介绍了使用Docker安装Jenkins并进行初始配置的完整流程。主要内容包括: (1)通过docker pull命令获取Jenkins镜像;(2)使用docker run命令启动容器并映射端口;(3)访问Jenkins界面获取初始管理员密码;(4)安装推荐插件并创…

嵌入式开发:GPIO、UART、SPI、I2C 驱动开发详解与实战案例

📍 本文为嵌入式学习系列第二篇,基于 GitHub 开源项目:0voice/EmbeddedSoftwareLearn 💬 作者:0voice 👀 适合对象:嵌入式初学者、STM32学习者、想搞明白外设驱动开发的C语言学习者 一、驱动是什…

常用 Linux 命令和 shell 脚本语言整理

目录 一、Linux 命令大全 1、文件和目录操作 (1)ls 列出目录内容 (2)pwd 查看当前目录 (3)cd 切换目录 (4)mkdir 创建目录 (5)cp 复制文件或目录 &…

YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-autobackend.py

autobackend.py ultralytics\nn\autobackend.py 目录 autobackend.py 1.所需的库和模块 2.def check_class_names(names: Union[List, Dict]) -> Dict[int, str]: 3.def default_class_names(data: Optional[Union[str, Path]] None) -> Dict[int, str]: 4.cla…

【MySQL基础】MySQL索引全面解析:从原理到实践

MySQL学习: https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482 前言: 在前面我们基本上已经把MySQL的基础知识都进行了学习,但是我们之前处理的数据都是十分少的,但是如果当我们的数据量很大…

第三十五章 I2S——音频传输接口

第三十五章 I2S——音频传输接口 目录 第三十五章 I2S——音频传输接口 1 I2S概述 1.1 简介 1.2 功能特点 1.3 工作原理 1.4 利用DMA通信的I2S 1.4.1 I2S配合DMA通信工作原理 1.4.2 配置要点 2 应用场景 2.1 消费类音频设备 2.2 专业音频设备 2.3 通信设备 2.4 汽车电子 2.5 嵌…

产品-Figma(英文版),图像的布尔类型图例说明

文章目录 Union SelectionSubtract SelectionIntersect SelectionExclude SelectionFlatten Selection Union Selection 把多个形状合并成一个新的完整形状,保留所有外部轮廓,内部不被切割。由于红色的长方形在外面的一层,所以切割后&#x…

Windows CMD命令分类大全

⚙️ ‌一、系统与磁盘管理‌ ‌系统信息‌ systeminfo:查看详细硬件及系统配置(版本/内存/补丁)211 winver:快速检查Windows版本11 msinfo32:图形化系统信息面板811‌磁盘工具‌ chkdsk /f:修复磁盘错误&…

【Dify系列】【Dify1.4.2 升级到Dify1.5.0】

1. 升级前准备工作 1.1 数据备份: 进入原安装包 docker 目录,备份“volumes”文件夹,此文件夹包含了 Dify 数据库数据: rootjoe:/usr/local/dify/docker/volumes# pwd /usr/local/dify/docker/volumesrootjoe:/usr/local/dify/…

DeepSeek网页版随机点名器

用DeepSeek帮我们生成了一个基于html5的随机点名器,效果非常棒,如果需要加入名字,请在代码中按照对应的格式添加即可。 提示词prompt 帮我生成一个随机点名的HTML5页面 生成真实一点的名字数据 点击随机按钮开始随机选择 要有闪动的效果 &…

前后端分离实战2----后端

戳我抵达前端 项目描述:用Vscode创建Spring Bootmybatis项目,用maven进行管理。创建一个User表,对其内容进行表的基本操作(增删改查),显示在前端。 项目地址:戳我一键下载项目 运行效果如下&…

深入 ARM-Linux 的系统调用世界

1、引言 本篇文章以 ARM 架构为例,进行讲解。需要读者有一定的 ARM 架构基础 在操作系统的世界中,系统调用(System Call)是用户空间与内核空间沟通的桥梁。用户态程序如 ls、cp 或你的 C 程序,无权直接操作硬件、访问文…

LabVIEW键盘鼠标监测控制

通过Input Device Control VIs,实现对键盘和鼠标活动的监测。通过AcquireInput Data VI 在循环中持续获取输入数据,InitializeKeyboard与InitializeMouse VIs 先获取设备ID 引用,用于循环内监测操作;运行时可输出按键信息&#xf…

Linux 系统管理:自动化运维与容器化部署

在现代 IT 基础设施中,自动化运维和容器化部署是提高系统管理效率和可维护性的关键。Linux 系统因其稳定性和灵活性而被广泛应用于服务器和数据中心。本文将深入探讨 Linux 系统管理中的自动化运维和容器化部署技术,帮助系统管理员实现高效运维和快速部署…

直播 APP 开发需要多少成本

直播行业的火爆催生了大量直播 APP 开发需求,而开发成本是开发者最关注的问题之一。其成本构成复杂,受功能需求、开发方式、技术难度等多种因素影响。​ 基础功能开发是成本的重要组成部分。用户注册登录、直播间创建与管理、视频播放、聊天互动等功能开…

Reactor操作符的共享与复用

在 Reactor 中,transform 和 transformDeferred 是两个用于代码复用和操作符链封装的高级操作符。它们允许你将一组操作符封装成一个函数,并在适当的时候应用到响应式流中。以下是它们的详细总结: 1. transform 操作符 作用:tran…

C#中的Converter详解

Converter是C#中一个非常有用的概念,主要用于类型转换。它通常以委托或接口的形式出现,允许开发者定义如何将一种类型转换为另一种类型。下面我将详细介绍Converter的概念、使用场景,并以布尔型转换为例展示具体应用。 Converter的基本概念 …

LabVIEW荧光微管图像模拟

利用LabVIEW平台,集成 PI 压电平台、Nikon 荧光显微镜及Andor sCMOS 相机等硬件,构建荧光微管滑行实验图像序列模拟系统。通过程序化模拟微管运动轨迹、荧光标记分布及显微成像过程,为生物医学领域微管跟踪算法测试、运动特性分析提供标准化仿…

CentOS下Nginx服务器搭建全攻略

Nginx 安装与配置完整指南 一、安装 Nginx 1.1 添加 Nginx 官方仓库 在 CentOS 系统中,默认仓库的 Nginx 版本可能较旧(通常为 1.12 或更早版本),建议添加官方仓库来安装最新稳定版本(目前为 1.25.x)&am…