如何在不创建对象的情况下在Kotlin中创建静态函数

如何在不创建对象的情况下在Kotlin中创建静态函数,kotlin,object,static-methods,Kotlin,Object,Static Methods,我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。 提议的解决办法: 对象A{ @JvmStatic fun mkdir(){} } 这是一个好的解决方案还是不可避免地会创建一个对象?我应该使用哪种模式?不幸的是,目前无法在Kotlin中的类上创建不导致对象(伴生对象)实例化的静态函数。如果您想这样做,您必须用Java编写它,并从Kotlin调用它 @JvmStatic注释在JVM字节码中创建一个静态方法,但所做的只是检索伴生对象的实例并对其调用该方法,您可以

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

对象A{
@JvmStatic
fun mkdir(){}
}

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

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


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

顶级函数不会污染全局名称空间-只污染文件所在包的名称空间。 
object
关键字不是给了你一个关于它是否使用对象的提示吗?  另外,您是否检查了?@gidds“顶级函数不会污染全局命名空间”公平点,我的意思是,您一眼就不知道函数在哪里,除非您将包的一部分添加到调用中。关于现有的问题:他们只是给出了标准的对象模式,似乎总是创建一个单音,这是否回答了您的问题?同伴对象是否创建了新的底层对象?@EmmanuelMess
同伴对象
s是
对象
s。Kotlin中的
对象
声明被转换为具有静态初始化唯一实例的常规类。使用
@JvmStatic
,方法
mkdir
将是静态的,但在初始化类时将创建唯一实例。你到底关心的是创造一个单身汉?