Kotlin static methods and variables

后端 未结 4 1253
南方客
南方客 2020-11-30 05:15

I want to be able to save a class instance to a public static variable but I can\'t figure out how to do this in Kotlin.

class Foo {

    public static Foo i         


        
相关标签:
4条回答
  • 2020-11-30 05:51

    You can create a companion object for the class, and if you want the field to be static you can use the annotation @JvmStatic. Companion object have access to private members of the class it is companion for.

    See below an example:

    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"
        }
    }
    
    0 讨论(0)
  • 2020-11-30 06:00

    The closest thing to Java's static fields is a companion object. You can find the documentation reference for them here: https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

    Your code in Kotlin would look something like this:

    class Foo {
    
        companion object {
            lateinit var instance: Foo
        }
    
        init {
            instance = this
        }
    
    }
    

    If you want your fields/methods to be exposed as static to Java callers, you can apply the @JvmStatic annotation:

    class Foo {
    
        companion object {
            @JvmStatic lateinit var instance: Foo
        }
    
        init {
            instance = this
        }
    
    }
    
    0 讨论(0)
  • 2020-11-30 06:03

    It looks that you want to define a singleton object. It is supported in Kotlin as a first-class concept:

    object Foo {
      ... 
    }
    

    All the boilerplate code with static field and constructor is taken care by the Kotlin automatically. You don't have to write any of that.

    From the Kotlin code you can refer to the instance of this object simply as Foo. From the Java code you can referer to the instance of this object as Foo.INSTANCE, because the Kotlin compiler automatically creates the corresponding static field named INSTANCE.

    0 讨论(0)
  • 2020-11-30 06:08

    first you create a simple class then after create a block followed by companion object keyword

    for example:

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

    you can call this class function using class name dot function name

    for example:

    // here you will get the function value
    Test.getValue() 
    
    0 讨论(0)
提交回复
热议问题