gpt4 book ai didi

kotlin - Kotlin 中的 Utils 类

转载 作者:IT老高 更新时间:2023-10-28 13:32:05 26 4
gpt4 key购买 nike

在 Java 中,我们可以像这样创建一个实用程序类:

final class Utils {
public static boolean foo() {
return false;
}
}

但是如何在 Kotlin 中做到这一点?


我尝试在 object 中使用函数:

object Utils {
fun foo(): Boolean {
return false
}
}

但是当从 Java 代码调用这个方法时,它需要添加 INSTANCE。例如:Utils.INSTANCE.foo().


然后我改声明为顶级函数(不带classobject):

@file:JvmName("Utils")
@file:JvmMultifileClass

fun foo(): Boolean {
return true
}

然后我可以从 Java 代码中调用 Utils.foo()。但是从 Kotlin 代码中我得到了 Unresolved reference 编译器错误。它只允许直接使用 foo() 函数(没有 Utils 前缀)。


那么在 Kotlin 中声明 utils 类的最佳方法是什么?

最佳答案

您提出的最后一个解决方案实际上在 Kotlin 中非常惯用 - 无需将您的函数范围限定在任何东西中,顶级函数就可以用于实用程序,事实上,这就是大多数标准库所包含的内容.

您也以正确的方式使用了 @JvmName 注释,这正是您应该使这些顶级函数易于 Java 用户调用的方式。

请注意,如果您将顶级函数放在不同的文件中,但仍希望它们最终组合在同一个类文件中(同样,仅适用于 Java 用户),则只需要 @JvmMultifileClass。如果您只有一个文件,或者您为每个文件指定不同的名称,则不需要此注释。


如果出于某种原因您希望在 Java 和 Kotlin 中使用相同的 Utils.foo() 语法,则使用 object@JvmStatic< 的解决方案 per method 就是这样做的方法,正如@marianosimone 在this answer 中所展示的那样.

关于kotlin - Kotlin 中的 Utils 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51811391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com