在 Kotlin 中,Java 静态方法的等效物是什么?伴随对象
Kotlin 中没有关键字。static
在 Kotlin 中表示 Java 方法的最佳方法是什么?static
Kotlin 中没有关键字。static
在 Kotlin 中表示 Java 方法的最佳方法是什么?static
将函数放在“伴随对象”中。
所以java代码是这样的:
class Foo {
public static int a() { return 1; }
}
将成为
class Foo {
companion object {
fun a() : Int = 1
}
}
然后,您可以从 Kotlin 代码中将其用作
Foo.a();
但是从Java代码中,您需要将其称为
Foo.Companion.a();
(这也适用于 Kotlin 内部。
如果您不喜欢必须指定位,则可以添加注释或命名伴随类。Companion
@JvmStatic
从文档中:
伴随对象
类中的对象声明可以使用关键字进行标记:
companion
class MyClass { companion object Factory { fun create(): MyClass = MyClass() } }
可以通过简单地使用类名作为限定符来调用伴随对象的成员:
val instance = MyClass.create()
...
但是,在 JVM 上,如果使用注释,则可以将伴随对象的成员生成为真正的静态方法和字段。有关更多详细信息,请参阅 Java 互操作性部分。
@JvmStatic
添加批注如下所示@JvmStatic
class Foo {
companion object {
@JvmStatic
fun a() : Int = 1;
}
}
然后它将作为一个真正的Java静态函数存在,可以从Java和Kotlin访问为.Foo.a()
如果它只是不喜欢这个名字,那么你也可以为伴随对象提供一个显式名称,如下所示:Companion
class Foo {
companion object Blah {
fun a() : Int = 1;
}
}
这将允许您以相同的方式从Kotlin调用它,但是从java中调用它(这也可以在Kotlin中工作)。Foo.Blah.a()
Docs 建议使用包级函数解决对静态函数的大多数需求。它们只是在源代码文件中的类外部声明。可以在文件开头使用 package 关键字指定文件的包。
声明
package foo
fun bar() = {}
用法
import foo.bar
或者
import foo.*
现在,您可以使用以下命令调用该函数:
bar()
或者,如果您不使用 import 关键字:
foo.bar()
如果未指定包,则可从根目录访问该函数。
如果你只有Java的经验,这可能看起来有点奇怪。原因是 kotlin 不是一种严格的面向对象语言。你可以说它支持类外的方法。
编辑:他们已经编辑了文档,不再包含有关推荐包级别函数的句子。这是上面提到的原始版本。