Kotlin静态方法和变量

Cal*_*ham 61 kotlin

我希望能够将类实例保存到公共静态变量,但我无法弄清楚如何在Kotlin中执行此操作.

class Foo {

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

}
Run Code Online (Sandbox Code Playgroud)

Edu*_* B. 97

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

您在Kotlin中的代码看起来像这样:

class Foo {

    companion object {
        lateinit var instance: Foo
    }

    init {
        instance = this
    }

}
Run Code Online (Sandbox Code Playgroud)

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

class Foo {

    companion object {
        @JvmStatic lateinit var instance: Foo
    }

    init {
        instance = this
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 使用`companion object`来声明`instance`字段是一个样板文件,如果你只是将`Foo`声明为`对象Foo {...},它就会被Kotlin编译器自动处理. (8认同)

Rom*_*rov 37

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

object Foo {
  ... 
}
Run Code Online (Sandbox Code Playgroud)

带有静态字段和构造函数的所有样板代码都由Kotlin自动处理.你不必写任何一个.

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


小智 7

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

例如:

class Test{

    companion object{

        fun  getValue(): String{

           return "Test String"

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

例如:

// here you will get the function value
Test.getValue() 
Run Code Online (Sandbox Code Playgroud)