Kotlin annidato e classe interna

In questo articolo imparerai a lavorare con classi nidificate e interne con l'aiuto di esempi.

Classe annidata di Kotlin

Simile a Java, Kotlin ti consente di definire una classe all'interno di un'altra classe nota come classe nidificata.

 class Outer (… class Nested (…))

Poiché la classe annidata è un membro della sua classe di inclusione Outer, è possibile utilizzare la .notazione per accedere alla Nestedclasse e ai suoi membri.

Esempio: classe annidata Kotlin

 class Outer ( val a = "Outside Nested class." class Nested ( val b = "Inside Nested class." fun callMe() = "Function call from inside Nested class." ) ) fun main(args: Array) ( // accessing member of Nested class println(Outer.Nested().b) // creating object of Nested class val nested = Outer.Nested() println(nested.callMe()) )

Quando esegui il programma, l'output sarà:

All'interno della classe annidata. Chiamata di funzione dall'interno della classe annidata.

Per utenti Java

La classe annidata in Kotlin è simile alla classe annidata statica in Java.

In Java, quando dichiari una classe all'interno di un'altra classe, per impostazione predefinita diventa una classe interna. Tuttavia in Kotlin, è necessario utilizzare il modificatore interno per creare una classe interna di cui parleremo in seguito.

Classe interna di Kotlin

Le classi nidificate in Kotlin non hanno accesso all'istanza della classe esterna. Per esempio,

 class Outer ( val foo = "Outside Nested class." class Nested ( // Error! cannot access member of outer class. fun callMe() = foo ) ) fun main(args: Array) ( val outer = Outer() println(outer.Nested().callMe()) )

Il codice precedente non verrà compilato perché abbiamo provato ad accedere alla proprietà foo della classe Outer dall'interno della classe Nested.

Per risolvere questo problema, è necessario contrassegnare la classe nidificata con inner per creare una classe interna. Le classi interne contengono un riferimento a una classe esterna e possono accedere ai membri della classe esterna.

Esempio: Kotlin Inner Class

 class Outer ( val a = "Outside Nested class." inner class Inner ( fun callMe() = a ) ) fun main(args: Array) ( val outer = Outer() println("Using outer object: $(outer.Inner().callMe())") val inner = Outer().Inner() println("Using inner object: $(inner.callMe())") )

Quando esegui il programma, l'output sarà:

Utilizzo dell'oggetto esterno: Classe esterna annidata. Utilizzo di un oggetto interno: Classe esterna annidata.

Letture consigliate: Anonimo Inner Class

Articoli interessanti...