Kotlin静态方法和variables

我想能够保存一个类的实例公共静态variables,但我不知道如何在Kotlin做到这一点。

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

Java的静态字段最接近的是一个伴侣对象。 你可以在这里find它们的文档参考: 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 } } 

看起来你想定义一个单例对象。 Kotlin支持它作为一流的概念:

 object Foo { ... } 

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

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

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

例如:

 class Test{ companion object{ fun getValue(): String{ return "Test String" } } } 

您可以使用类名称点函数名称来调用此类函数

例如:

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

你可以为这个类创建一个伴侣对象,如果你真的想要这个字段是静态的,你可以使用注解@JvmStatic。 Companion对象可以访问它所伴随的类的私有成员。

看下面的例子:

 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" } }