在Java中,我们可以创建一个这样的utils类:
final class Utils {
public static boolean foo() {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
但是如何在Kotlin做到这一点?
我尝试过使用里面的函数object:
object Utils {
fun foo(): Boolean {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
但是当从Java代码调用此方法时,需要添加INSTANCE.例如:Utils.INSTANCE.foo().
然后我改为将其声明为顶级函数(不带class或object):
@file:JvmName("Utils")
@file:JvmMultifileClass
fun foo(): Boolean {
return true
}
Run Code Online (Sandbox Code Playgroud)
然后我可以Utils.foo()从Java代码调用.但是从Kotlin代码我得到了Unresolved reference编译器错误.它只允许foo()直接使用功能(没有Utils).
那么在Kotlin中声明utils类的最佳方法是什么?请帮我!
zsm*_*b13 21
你提出的最后一个解决方案实际上在Kotlin中非常惯用 - 没有必要将你的函数放在任何东西中,顶级函数可以很好地用于实用程序,事实上,这就是大多数标准库所包含的.
您也@JvmName正确地使用了注释,这正是您应该如何使Java用户可以轻松调用这些顶级函数.
请注意,只有@JvmMultifileClass将顶级函数放在不同的文件中,但仍希望它们最终分组在同一个类文件中时才需要(同样,仅适用于Java用户).如果您只有一个文件,或者您为每个文件指定了不同的名称,则不需要此注释.
如果由于某种原因你想Utils.foo()在Java和Kotlin中使用相同的语法,那么使用a object和then @JvmStatic方法的解决方案就是这样做的方法,正如@marianosimone在这个答案中所示.
mar*_*one 18
您需要@JvmStatic为此:
在科特林:
object Utils {
@JvmStatic
fun foo(): Boolean = true
}
val test = Utils.foo()
Run Code Online (Sandbox Code Playgroud)
在Java中:
final boolean test = Utils.foo()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6823 次 |
| 最近记录: |