2016-06-13 20 views
6

Diciamo che ho dichiarato un campo finale con private final String s (Java) o val s (Kotlin). Durante l'inizializzazione, desidero inizializzare il campo con il risultato di una chiamata a un servizio remoto. In Java sarei in grado di inizializzarlo nel costruttore (ad esempio s = RemoteService.result()), ma in Kotlin non riesco a capire come farlo perché, per quanto posso dire, il campo deve essere inizializzato nella stessa riga dichiarata. Qual è la soluzione qui?Come inizializzare un campo finale in Kotlin?

risposta

10

È possibile impostare val valore nel blocco init:

class MyClass { 

    val s: String 

    init { 
     s = "value" 
    } 

} 
4

È anche possibile inizializzare il valore con by lazy il valore verrà inizializzato la prima volta che si parla. Un esempio

val s by lazy { RemoteService.result() } 

kotlin indovina il tipo di s dal tipo restituito dell'espressione.

Problemi correlati