【问题标题】:How to create static functions in Kotlin without creating an object如何在 Kotlin 中创建静态函数而不创建对象
【发布时间】:2021-08-13 03:34:56
【问题描述】:

我希望拥有位于类中的函数(不污染全局命名空间)但可以静态访问(从不创建它们所在的对象)。 建议的解决方案:

object A {
  @JvmStatic
  fun mkdir() {}
}

这是一个好的解决方案还是会不可避免地创建一个对象?我应该使用哪种模式?

【问题讨论】:

  • 顶级函数不会污染全局命名空间——只污染文件所在包的命名空间。  而且object 关键字不会提示您这是否使用对象?另外,你检查过manyexistingquestionsaboutstaticsin Kotlin吗?
  • @gidds "顶层函数不会污染全局命名空间" 正点,我的意思是你不一眼就知道函数在哪里,除非你添加部分的包到调用。关于现有问题:他们只是给出标准对象模式,似乎总是创建一个单例
  • 伴生对象会创建新的底层对象吗?
  • @EmmanuelMess companion objects 是 objects。 Kotlin 中的 object 声明被转换为具有静态初始化唯一实例的常规类。使用@JvmStatic,方法mkdir 将是静态的,但是在初始化类时仍然会创建唯一实例。对于单例的创建,您到底关心什么?

标签: kotlin object static-methods


【解决方案1】:

不幸的是,目前没有办法在 Kotlin 中的类上创建一个不会导致 Object(伴生对象)实例化的静态函数。如果你想这样做,你必须用 Java 编写它并从 Kotlin 中调用它。

@JvmStatic 注释在 JVM 字节码中创建一个静态方法,但所做的只是检索伴随对象的实例并调用其上的方法,您可以通过反编译生成的字节码来验证。

【讨论】:

  • Proguard 是否删除未使用的实例化?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2017-04-20
  • 1970-01-01
  • 2013-03-13
  • 2022-01-19
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多