Kotlin의 정적 초기화 블록


84

Kotlin 의 정적 초기화 블록 에 해당하는 것은 무엇입니까 ?

Kotlin이 정적 인 것을 갖지 않도록 설계되었음을 이해합니다. 동일한 의미를 가진 무언가를 찾고 있습니다. 클래스가 처음로드 될 때 코드가 한 번 실행됩니다.

내 특정 사용 사례는 Android AppCompat 라이브러리에서 DayNight 기능을 사용하도록 설정하고 클래스의 정적 초기화 블록에 일부 코드를 넣으 라는 지침Application 입니다.

답변:


123

어떤 관점에서 보면 Kotlin companion object의 s 는 자바 클래스의 정적 부분과 동일합니다. 특히 클래스가 처음 사용되기 전에 초기화되며이를 통해 해당 init블록을 Java 정적 초기화 프로그램의 대체물로 사용할 수 있습니다 .

class C {
    companion object {
        init {
            //here goes static initializer code
        }
    }
}

1
동반자 개체는 여기에서 과잉입니다
voddan

4
@voddan, OP는 기존 클래스를 처음 사용하기 전에 코드 실행에 대해 질문했습니다. object선언이있는 솔루션 은 지연 초기화로 인해 실제로 어딘가에서 사용해야합니다.
핫키

1
@voddan 과잉 인 이유와 대안이 무엇인지 설명해 주시겠습니까?
Marcin Koziński 2016

2
죄송합니다. 수업 로딩에 신경 쓰지 않았다고 생각했습니다. 컴패니언 개체는 여기에서 올바른 솔루션입니다
voddan

정적 초기화 만 수행하려는 경우 동반 객체를 비공개로 설정하거나 보호해야합니다.
mipa

3
companion object  { 
    // Example for a static variable
    internal var REQUEST_CODE: Int? = 500

    // Example for a static method
    fun callToCheck(value: String): String {
        // your code
    }
}

클래스 내부의 객체 선언은 동반 키워드로 표시 할 수 있으며,이 아래에서 java static method 및 variable.LIke classname.methodname 또는 classname.variablename과 같이 사용할 수 있습니다.


코드에 설명 추가
Freelancer

@DerickDaniel 지금 확인하십시오.
abhilasha Yadav
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.