2016-05-16 45 views
32

Qual è l'equivalente di uno static initialisation block in Kotlin?Blocco di inizializzazione statico in Kotlin

Capisco che Kotlin è progettato per non avere cose statiche. Sto cercando qualcosa con una semantica equivalente: il codice viene eseguito una volta quando la classe viene caricata per la prima volta.

mio specifico caso d'uso è che voglio per abilitare la funzione DayNight da Android biblioteca AppCompat e the instructions dico a mettere un po 'di codice nel blocco di inizializzazione statico della Application di classe.

risposta

52

Da un certo punto di vista, companion objects in Kotlin sono equivalenti a parti statiche delle classi Java. In particolare, vengono inizializzati prima del primo utilizzo di classe, e questo consente di utilizzare i loro init blocchi come un sostituto per inizializzatori statici di Java:

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

oggetto associato è un peso inutile qui – voddan

+1

@voddan, OP ha chiesto l'esecuzione di codice prima della primo utilizzo di una classe esistente. La soluzione con la dichiarazione 'object' richiede che venga effettivamente utilizzata da qualche parte a causa dell'inizializzazione pigra. – hotkey

+0

@voddan Ti piacerebbe spiegare perché è eccessivo e quali sarebbero le alternative? –