클래스 인스턴스를 공용 정적 변수에 저장할 수 있기를 원하지만 Kotlin에서이 작업을 수행하는 방법을 알 수 없습니다.
class Foo {
    public static Foo instance;
    public Foo() {
        instance = this;
    }
}
답변
Java의 정적 필드에 가장 가까운 것은 동반 객체입니다. 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()
답변
클래스에 대한 컴패니언 개체를 만들 수 있으며 필드를 원하는 경우 static@JvmStatic 주석을 사용할 수 있습니다. 컴패니언 객체는 컴패니언 인 클래스의 비공개 멤버에 액세스 할 수 있습니다.
아래 예를 참조하십시오.
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"
    }
}
답변
