kotlin中object:的用法

在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…