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