在kotlin中如何使用像java中的static

在 Kotlin 中,沒有直接的 static 關鍵字,但有幾種等效的方式來實現 Java 中靜態成員的功能:

1. 伴生對象 (Companion Object) - 最常用

class MyClass {companion object {// 靜態常量const val STATIC_CONSTANT = "constant value"// 靜態變量var staticVariable: Int = 42// 靜態方法fun staticMethod(): String {return "This is a static method"}// @JvmStatic 注解使其在 Java 中更像靜態方法@JvmStaticfun jvmStaticMethod(): String {return "This appears as static in Java"}}
}// 使用方式
val constant = MyClass.STATIC_CONSTANT
val variable = MyClass.staticVariable
val result = MyClass.staticMethod()

2. 包級函數和屬性 (Top-level Declarations)

在文件頂層直接定義,不需要類包裝:

// 在 Utils.kt 文件中// 包級常量
const val APP_NAME = "MyApp"// 包級變量
var globalCounter = 0// 包級函數
fun formatMessage(message: String): String {return "[INFO] $message"
}// 使用方式(直接導入)
import formatMessagefun test() {println(APP_NAME)globalCounter++val msg = formatMessage("Hello")
}

3. 對象聲明 (Object Declaration) - 單例模式

object StringUtils {// 靜態方法fun isEmpty(str: String?): Boolean {return str.isNullOrEmpty()}// 靜態常量const val EMPTY_STRING = ""
}// 使用方式
val isEmpty = StringUtils.isEmpty("test")

4. @JvmStatic 注解

與伴生對象結合使用,確保在 Java 代碼中也能像靜態方法一樣調用:

class MathUtils {companion object {@JvmStaticfun add(a: Int, b: Int): Int = a + b@JvmStaticval PI = 3.14159}
}// 在 Java 中可以這樣調用:
// MathUtils.add(1, 2);
// double pi = MathUtils.PI;

總結對比

Java 方式Kotlin 等效方式使用示例
static final 常量const valMyClass.CONSTANT
static 變量伴生對象中的 varMyClass.staticVar
static 方法伴生對象中的函數MyClass.staticMethod()
工具類靜態方法包級函數或對象聲明StringUtils.isEmpty()
靜態初始化塊init 塊在伴生對象中companion object { init {...} }

推薦做法

  • 常量: 使用 const val 在伴生對象或包級
  • 工具方法: 使用包級函數或對象聲明
  • 需要與 Java 互操作的靜態成員: 使用伴生對象 + @JvmStatic
  • 單例: 使用 object 聲明
// 推薦的綜合示例
class AppConfig {companion object {const val VERSION = "1.0.0"@JvmStaticfun getDefaultConfig(): Map<String, Any> {return mapOf("timeout" to 5000, "retries" to 3)}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在 Spring Boot 中指定不同的配置文件?

介紹 Spring Boot 提供了多種方式來管理和加載配置文件&#xff0c;特別是在多環境配置下&#xff0c;比如開發、測試和生產環境。通過指定不同的配置文件&#xff0c;可以靈活地調整應用程序的行為&#xff0c;以適應不同的需求。本文將介紹在 Spring Boot 中如何指定使用不同…

在centOS源碼編譯方式安裝MySQL5.7

一、前言 在生產環境中部署數據庫時&#xff0c;很多人會選擇直接使用 yum/apt 包管理器 安裝 MySQL&#xff0c;這樣簡單快速&#xff0c;但缺點是版本受限&#xff0c;靈活性不足。對于需要指定版本、啟用特定編譯參數或優化的場景&#xff0c;源碼編譯安裝 MySQL 就顯得非常…

探討Hyperband 等主要機器學習調優方法的機制和權衡

本篇文章Master Hyperband — An Efficient Hyperparameter Tuning Method in Machine Learning深入探討了Hyperband這一高效的超參數調優方法。文章的技術亮點在于其結合了多臂老虎機策略和逐次減半算法&#xff0c;能夠在大搜索空間中快速剔除表現不佳的配置&#xff0c;從而…

Mysql:InnoDB 關鍵特性

目錄 一、插入緩沖&#xff08;Change Buffer&#xff09;→ 快遞驛站的 “臨時存放區” 二、兩次寫&#xff08;Double Write&#xff09;→ 重要文件的 “備份存檔” 三、自適應哈希索引&#xff08;AHI&#xff09;→ 圖書館的 “熱門書快捷查找區” 四、異步 IO&#x…

STM32-----SPI

SPI簡介SCK:和I2C中SCL的時鐘線一個作用&#xff0c;都是在高電平拿出數據&#xff0c;在低電平寫數據MOSI:主機輸出從機輸入MISO:主機輸入從機輸出&#xff0c;只有當對應從機的SS為低電平&#xff0c;從機的MISO引腳才能設置推挽輸出&#xff0c;當從機SS為高電平時&#xff…

華為考試:HCIE數通考試難度分析

隨著信息技術的飛速發展&#xff0c;網絡技術已成為支撐各行各業運轉的重要基礎&#xff0c;市場對高水平網絡技術人才的需求持續增長。HCIE作為華為認證體系中的最高級別認證&#xff0c;代表了網絡技術領域的專業頂尖水平。本文將對HCIE數通認證的考試內容、難度及備考策略進…

一些常用的激活函數及繪圖

深度網絡的一些常用激活函數&#xff0c;并通過matplot繪制出來&#xff1a; import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE蘋果手機iPhone 17展示動畫片頭模板 App Promo Phone 17 Pro

專為 App 發布會、電商促銷、新品宣傳 打造的 iPhone 17 Pro 動畫展示 AE 模板。 4K 超清分辨率 26 張可替換照片位&#xff0c;無需第三方插件&#xff0c;拖拽即可輸出專業級手機宣傳片。 核心亮點 4K 超清&#xff1a;38402160 分辨率&#xff0c;大屏投放與社媒高清壓縮無…

基于Python的云原生TodoList Demo 項目,驗證云原生核心特性

以下是一個基于 Python 的云原生 TodoList Demo 項目&#xff0c;涵蓋 容器化、Kubernetes 編排、CI/CD、可觀測性、彈性擴縮容 等核心云原生特性&#xff0c;代碼簡潔且附詳細操作指南&#xff0c;適合入門學習。項目概覽 目標&#xff1a;實現一個支持增刪改查&#xff08;CR…

go 日志的分裝和使用 Zap + lumberjack

自帶的log無法滿足 按大小輪轉 &#xff0c;按天數清理舊日志 &#xff0c;自動壓縮 &#xff0c;限制備份數量 &#xff0c;防止磁盤寫滿 &#xff0c;生產環境推薦 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技術棧梳理】01-核心框架與運行時(CLR)

文章目錄1 .NET Runtime&#xff08;CLR-公共語言運行時&#xff09;1.1 中間語言 IL1.1.1 從源代碼到通用中間語言&#xff08;IL&#xff09;1.1.2 運行時加載&#xff1a;CLR登場1.1.3 核心步驟&#xff1a;即時編譯 (JIT Compilation)1.1.4 執行與內存管理&#xff08;GC&a…

Claude Code 平替:OpenAI發布 Codex CLI ,GPT-5 國內直接使用

openai推出的命令行編程工具codex已經可以使用最新 GPT-5 模型&#xff0c;擁有可媲美 Claude Code 的 AI 編碼能力。本文將指導你在 Windows 系統上部署原生的 Codex CLI 程序&#xff0c;并接入超低價中轉 API&#xff0c;讓你在國內直接用上超高性價比的 OpenAI Codex CLI 應…

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 ce.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

在VS2022的WPF仿真&#xff0c;為什么在XAML實時預覽點擊 WpfApp1\FunctionalModule\08Replace\Replace.xaml頁面控件&#xff0c;卻不會自動跳轉到具體代碼&#xff0c;這樣不方便我修改代碼&#xff0c;

Git Bash 別名

有些常用的指令參數非常多&#xff0c;每次都要輸入好多參數&#xff0c;我們可以使用別名。Linux 系統中很多 shell&#xff0c;包括 bash&#xff0c;sh&#xff0c;zsh&#xff0c;dash 和 korn 等&#xff0c;不管哪種 shell 都會有一個 .bashrc 的隱藏文件&#xff0c;它就…

Centos7部署ceph存儲

一、準備5臺centos7主機 node節點雙網卡&#xff08;1個內部檢測&#xff0c;1個外部使用&#xff09;node節點都添加新網卡關閉防火墻和上下文都需要添加hosts文件都需要cat > /etc/hosts << EOF > 127.0.0.1 localhost localhost.localdomain localhost4 loca…

2025.9.10總結

今日感悟&#xff1a;刷到00后下班去菜市場撿菜的熱點視頻&#xff0c;確實挺有意思&#xff0c;不得不說&#xff0c;又省錢又好玩。雖然每天晚上能免費領個25塊錢的水果回去&#xff0c;但確實沒有什么新鮮感了。別人下班還能撿撿菜放松下&#xff0c;我下班&#xff0c;除了…

【數據結構與算符Trip第2站】稀疏數組

稀疏sparsearray數組 什么是稀疏數組&#xff1f; 稀疏數組是一種特殊的數據結構&#xff0c;用于高效存儲和表示大部分元素為零&#xff08;或默認值&#xff09;的數組。它通過只存儲非零元素的位置和值來節省內存空間。是一種壓縮數組。 實現原理 在Go語言中&#xff0c;稀疏…

Sub-GHz無線收發單片機,低功耗物聯網通信的硬件“基石”

隨著物聯網應用持續向規模化部署、廣域化覆蓋與高效化協同邁進&#xff0c; 作為IoT終端設備實現無線交互的核心通信單元之一——Sub-GHz無線收發單片機&#xff08;Sub-GHz射頻收發芯片與單片機高度集成&#xff09;已成為系統設計中進一步簡化外圍元件數量、縮小硬件體積、降…

用Typescript 的方式封裝Vue3的表單綁定,支持防抖等功能

在 Vue3 中結合 TypeScript 封裝表單綁定方案時&#xff0c;需要綜合考慮類型安全、功能擴展性和開發體驗。以下是一個包含防抖功能、支持多種表單控件、具備完整類型推導的封裝方案&#xff0c;全文約 2300 字&#xff1a; 方案設計思路 組合式函數封裝&#xff1a;使用 Vue3 …

中悅大華通過訂單日記實現流程重構之路

一、客戶背景 安徽中悅大華高速流體機械有限公司&#xff0c;成立于2023年&#xff0c;位于安徽省宣城市&#xff0c;是一家以從事電子設備制造為主的企業&#xff0c;在多年的商業經營中已成為業界翹楚。 在業務不斷壯大的過程中&#xff0c;面臨生產協作效率低&#xff0c;庫…