当前位置: 首页 > 知识库问答 >
问题:

如何在静态编程语言中创建静态函数而不创建对象

徐皓君
2023-03-14

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

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

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

共有1个答案

云远
2023-03-14

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

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

 类似资料:
  • 我使用的是Gradle 5.5,我有一个基于Groovy的构建脚本,我正试图将其迁移到Kotlin DSL。任务包含将所有依赖项复制到jar文件的典型行: 我找不到一种方法来把这一行翻译成Kotlin DSL。 让我给你一些背景知识。这是我最初基于Groovy的构建脚本: 这是我基于静态编程语言的构建脚本。它运行良好,除了一行:

  • 我有一个注释要求是编译时常量。我从下面的中获取: 我的s如下: 当我使用注解Kotlin需要是编译时常量。 注释实现本身: 我仔细研究了类似的问题,但没有找到解决方法。我还找到了一篇与这个主题相关的文章,但到目前为止没有任何效果。 附带说明:我不能更改注释,因为它来自库,我也不能更改库。 总而言之,有没有办法从静态编程语言中的编译时常量到注释中使用?

  • 我想创建一个从到的字母表,但到目前为止,我只能将以下方法视为最短的方法,而无需编写每个字母表。 所以我想知道是否有任何Lambda实现或更短的方法?

  • 我正在尝试使用Exposed on Kotlin编写CRUD服务。我有一张多对一的参考表。当我尝试插入时,我得到 Java语言lang.IllegalStateException:上下文中没有事务。 这是表和实体 下面是用于创建的服务方法 保存实体后调用toContact()方法时引发错误 var contact=contactEntity。toContact() 创建此类实体的正确方法是什么?

  • 我有静态函数,它仅限于一些上下文(例如仅用于文档)。有两种替代方法可以将其定义为顶层函数或对象中的函数。 1. 2. 顶级函数的优点是它没有被包装在一个对象中,缺点是它可以从任何地方访问,没有类名前缀。这种情况有优点还是缺点或最佳实践?

  • 我对如何使用Gradle制作胖罐做了很多研究。但是,我无法弄清楚如何使用Kotlin DSL和插件。我有这个代码: 但是我不知道如何为胖罐子清单指定主类。我遵循的教程是这样做的: 但这是Groovy DSL,而不是Kotlin DSL,我还不太熟悉Kotlin的DSL,所以我不知道如何将其转换为Kotlin DSL。非常感谢你的帮助。