Kotlin静态方法和变量
我希望能够将一个类实例保存到一个公共静态变量中,但我不知道如何在Kotlin中实现这一点Kotlin静态方法和变量,kotlin,Kotlin,我希望能够将一个类实例保存到一个公共静态变量中,但我不知道如何在Kotlin中实现这一点 class Foo { public static Foo instance; public Foo() { instance = this; } } 最接近Java静态字段的是一个伴生对象。您可以在此处找到他们的文档参考: Kotlin中的代码如下所示: class Foo { companion object { lateinit
class Foo {
public static Foo instance;
public Foo() {
instance = this;
}
}
最接近Java静态字段的是一个伴生对象。您可以在此处找到他们的文档参考: Kotlin中的代码如下所示:
class Foo {
companion object {
lateinit var instance: Foo
}
init {
instance = this
}
}
如果希望字段/方法以静态方式公开给Java调用方,可以应用注释:
class Foo {
companion object {
@JvmStatic lateinit var instance: Foo
}
init {
instance = this
}
}
首先创建一个简单的类,然后创建一个块,后跟伴随对象关键字 例如:
class Test{
companion object{
fun getValue(): String{
return "Test String"
}
}
}
您可以使用类名dot function name调用这个类函数
例如:
// here you will get the function value
Test.getValue()
您可以为类创建一个伴生对象,如果希望字段是
static
,可以使用注释@JvmStatic。Companion对象可以访问它作为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"
}
}
看起来您想要定义一个单例对象。它在Kotlin中作为一流概念得到支持:
object Foo {
...
}
所有带有静态字段和构造函数的样板代码都由Kotlin自动处理。你不必写这些
从Kotlin代码中,您可以将此对象的实例简单地称为
Foo
。从Java代码中,您可以将此对象的实例引用为Foo.instance
,因为Kotlin编译器会自动创建名为instance
的相应静态字段。但我觉得这很糟糕。为什么要使用可变静态字段(已经是一种糟糕的做法),并在每次构造Foo实例时对其进行修改?你想实现什么?如果你想创建一个单例,请查看。使用伴生对象
来声明实例
字段是一个样板文件,如果你简单地将Foo
声明为对象Foo{…}
这是更好的解决方案,然而,对于我的用例,我需要一个类,因为它需要能够由Java类加载器创建。