Kotlin'de statik başlatma bloğu


84

Kotlin'deki statik başlatma bloğunun eşdeğeri nedir ?

Kotlin'in statik şeyler olmayacak şekilde tasarlandığını anlıyorum. Eşdeğer semantiğe sahip bir şey arıyorum - kod, sınıf ilk yüklendiğinde bir kez çalıştırılır.

Benim özel kullanım durumum, DayNight özelliğini Android AppCompat kitaplığından etkinleştirmek istemem ve talimatlar , Applicationsınıfın statik başlatma bloğuna bazı kodlar koymayı söylüyor .

Yanıtlar:


123

Bazı bakış açılarından, Kotlin'deki ' companion objectler Java sınıflarının statik kısımlarına eşdeğerdir. Özellikle, sınıfın ilk kullanımından önce başlatılırlar ve bu, initbloklarını Java statik başlatıcılarının yerine kullanmanıza izin verir :

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

1
eşlik eden nesne burada aşırı bir şey
voddan

4
@voddan, OP mevcut bir sınıfın ilk kullanımından önce kodun çalıştırılmasını sordu. Bildirimli çözüm object, tembel başlatma nedeniyle birinin onu gerçekten bir yerde kullanmasını gerektirir.
kısayol tuşu

1
@voddan Bunun neden abartılı olduğunu ve alternatiflerin neler olacağını açıklar mısınız?
Marcin Koziński

2
Özür dilerim, benim hatam, dersin yükünü umursamadığını düşünerek yanılmışım. Eşlik eden nesne burada doğru çözümdür
voddan

Tek elde etmek istediğiniz statik başlatma ise, yardımcı nesne muhtemelen özel veya korumalı hale getirilmelidir.
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
    }
}

Bir sınıfın içindeki bir nesne bildirimi, tamamlayıcı anahtar kelime ile işaretlenebilir ve bunun altında java statik metodu ve değişken gibi kullanabiliriz.LIke sınıfadı.metodadı veya sınıfadı.variablename


KODUNUZA BAZI AÇIKLAMALAR EKLEYİN
Freelancer

@DerickDaniel lütfen şimdi kontrol edin.
abhilasha Yadav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.