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

在 Kotlin 中,没有直接的 static 关键字,但有几种等效的方式来实现 Java 中静态成员的功能:

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

kotlin 复制代码
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 中更像静态方法
        @JvmStatic
        fun 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)

在文件顶层直接定义,不需要类包装:

kotlin 复制代码
// 在 Utils.kt 文件中

// 包级常量
const val APP_NAME = "MyApp"

// 包级变量
var globalCounter = 0

// 包级函数
fun formatMessage(message: String): String {
    return "[INFO] $message"
}

// 使用方式(直接导入)
import formatMessage

fun test() {
    println(APP_NAME)
    globalCounter++
    val msg = formatMessage("Hello")
}

3. 对象声明 (Object Declaration) - 单例模式

kotlin 复制代码
object StringUtils {
    // 静态方法
    fun isEmpty(str: String?): Boolean {
        return str.isNullOrEmpty()
    }
    
    // 静态常量
    const val EMPTY_STRING = ""
}

// 使用方式
val isEmpty = StringUtils.isEmpty("test")

4. @JvmStatic 注解

与伴生对象结合使用,确保在 Java 代码中也能像静态方法一样调用:

kotlin 复制代码
class MathUtils {
    companion object {
        @JvmStatic
        fun add(a: Int, b: Int): Int = a + b
        
        @JvmStatic
        val PI = 3.14159
    }
}

// 在 Java 中可以这样调用:
// MathUtils.add(1, 2);
// double pi = MathUtils.PI;

总结对比

Java 方式 Kotlin 等效方式 使用示例
static final 常量 const val MyClass.CONSTANT
static 变量 伴生对象中的 var MyClass.staticVar
static 方法 伴生对象中的函数 MyClass.staticMethod()
工具类静态方法 包级函数或对象声明 StringUtils.isEmpty()
静态初始化块 init 块在伴生对象中 companion object { init {...} }

推荐做法

  • 常量 : 使用 const val 在伴生对象或包级
  • 工具方法: 使用包级函数或对象声明
  • 需要与 Java 互操作的静态成员 : 使用伴生对象 + @JvmStatic
  • 单例 : 使用 object 声明
kotlin 复制代码
// 推荐的综合示例
class AppConfig {
    companion object {
        const val VERSION = "1.0.0"
        
        @JvmStatic
        fun getDefaultConfig(): Map<String, Any> {
            return mapOf("timeout" to 5000, "retries" to 3)
        }
    }
}
相关推荐
plainGeekDev1 天前
Glide 该换了?Coil:Kotlin 时代的图片加载库
android·开源·kotlin
plainGeekDev1 天前
Android内存面试题:OOM都解决不了,性能优化从何谈起?
android·面试·kotlin
疏狂难除2 天前
JetBrains IDE插件开发教程(二)——学习初始代码
ide·kotlin
plainGeekDev2 天前
Kotlin协程面试题:suspend原理都说不清,协程你真会用?
android·面试·kotlin
赏金术士2 天前
第六章:UI组件与Material3主题
android·ui·kotlin·compose
赏金术士3 天前
Jetpack Compose 底部导航实战教程(完整版)
android·kotlin·compose
Honker_yhw3 天前
大数据管理与应用系列丛书《数据挖掘》(吕欣等著)读书笔记-LASSO回归
数据挖掘·回归·kotlin
程序员煊子3 天前
用 Cursor 从零搭一个 Compose 本地记账 App:实战记录与源码解析
android·kotlin·compose·cursor
alexhilton3 天前
面向Android开发者的Google I/O 2026
android·kotlin·android jetpack
idingzhi4 天前
A股量化策略日报(2026年05月22日)
android·开发语言·python·kotlin