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.