Kotlin中与Java static class等价的实现方式是什么?
Kotlin 中 Java
static class 的等价实现 Kotlin 本身没有static关键字,对应 Java 不同场景的静态类,有几种常用的等价实现:
注:Java 本身不存在顶层静态类,
static class只能是嵌套静态类,核心特性是无需依赖外部类实例即可实例化、可直接持有静态成员。
- 场景1:替代 Java 的嵌套静态类
Kotlin 的默认嵌套类本身就等价于 Java 的静态嵌套类,无需额外修饰:
class Outer { // 该嵌套类对应Java的static class StaticNestedClass class StaticNestedClass { fun test() = println("嵌套静态类方法") } } // 调用方式,不需要创建Outer实例 val nestedInstance = Outer.StaticNestedClass()
- 场景2:替代全静态方法的工具类(Java中常声明为final类+私有构造、所有方法都是static)
直接用object关键字声明单例类即可,调用时无需创建实例,和Java静态工具类的使用方式完全一致:
object CommonUtils { fun calculate(a: Int, b: Int) = a + b val VERSION = "1.0.0" } // 调用方式 val sum = CommonUtils.calculate(1,2) val version = CommonUtils.VERSION
- 场景3:在普通类内部添加静态成员或静态嵌套类
在类内声明companion object(伴生对象),内部的所有内容都对应Java的静态成员区域:
class User { // 伴生对象内部的内容等价于Java的静态成员 companion object { // const修饰的常量对应Java的public static final常量 const val TAG = "User" // 加@JvmStatic注解后可以在Java代码中像普通静态方法一样调用 @JvmStatic fun getDefaultUser() = User() class StaticConfig { val defaultAge = 18 } } var name: String = "" } // 调用方式 val defaultUser = User.getDefaultUser() val userTag = User.TAG val config = User.StaticConfig()
内容的提问来源于stack exchange,提问作者Saurabh Dhage
相关产品推荐
相关产品推荐

