Kotlin 静态方法和变量

我希望能够将一个类实例保存为一个公共静态变量,但我不知道如何在 Kotlin 实现这一点。

class Foo {


public static Foo instance;
public Foo() {
instance = this;
}


}
148910 次浏览

与 Java 的静态字段最接近的是一个伴随对象。您可以在这里找到它们的文档参考: https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

你在 Kotlin 的代码应该是这样的:

class Foo {


companion object {
lateinit var instance: Foo
}


init {
instance = this
}


}

如果希望将字段/方法作为静态公开给 Java 调用方,可以应用 @JvmStatic注释:

class Foo {


companion object {
@JvmStatic lateinit var instance: Foo
}


init {
instance = this
}


}

首先创建一个简单的类,然后创建一个块,后面跟着伴随的对象关键字

例如:

class Test{


companion object{


fun  getValue(): String{


return "Test String"


}
}
}

可以使用类名点函数名调用此类函数

例如:

// here you will get the function value
Test.getValue()

您可以为类创建一个伴随对象,如果希望字段为 static,可以使用注释@Jvmstatic。伴侣对象可以访问它所伴随的类的私有成员。

下面是一个例子:

class User {
private lateinit var name: String


override fun toString() = name


companion object {
@JvmStatic
val instance by lazy {
User().apply { name = "jtonic" }
}
}
}


class CompanionTest {


@Test
fun `test companion object`() {
User.instance.toString() shouldBe "jtonic"
}
}

看起来你需要定义一个单例对象,Kotlin 支持这个概念:

object Foo {
...
}

所有带有静态字段和构造函数的样板代码都由 Kotlin 自动处理。你不用写那些东西。

在 Kotlin 代码中,你可以简单地将这个对象的实例称为 Foo。从 Java 代码中,您可以将这个对象的实例称为 Foo.INSTANCE,因为 Kotlin 编译器会自动创建相应的名为 INSTANCE的静态字段。