Kotlin 정적 메서드 및 변수
클래스 인스턴스를 공용 정적 변수에 저장할 수 있기를 원하지만 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()
클래스에 대한 컴패니언 객체를 만들 수 있으며 필드가 실제로 정적 인 경우 @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"
}
}
참고 URL : https://stackoverflow.com/questions/43857824/kotlin-static-methods-and-variables
'developer tip' 카테고리의 다른 글
C # DllImport에서 32 비트 또는 64 비트 DLL 사용 (0) | 2020.12.07 |
---|---|
현재 분기의 팁이 뒤에 있기 때문에 업데이트가 거부되었습니다. (0) | 2020.12.07 |
기능적 구성 요소 내부의 ReactJS 수명주기 방법 (0) | 2020.12.07 |
Windows 서비스를 단위 테스트하려면 어떻게해야합니까? (0) | 2020.12.07 |
ASP.NET MVC : 컨트롤러 메서드에서 다운로드 할 일반 텍스트 파일 반환 (0) | 2020.12.07 |