Kotlin genest en innerlijke klasse

In dit artikel leer je aan de hand van voorbeelden werken met geneste en innerlijke klassen.

Kotlin geneste klasse

Net als Java stelt Kotlin je in staat om een ​​klasse te definiëren binnen een andere klasse die bekend staat als geneste klasse.

 klasse Outer (… klasse genest (…))

Omdat Geneste klasse een lid is van de omsluitende klasse Outer, kunt u de .notatie gebruiken om toegang te krijgen tot de Nestedklasse en de leden ervan.

Voorbeeld: Kotlin geneste klasse

 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()) )

Wanneer u het programma uitvoert, is de uitvoer:

Binnen geneste klasse. Functieaanroep vanuit de geneste klasse.

Voor Java-gebruikers

De geneste klasse in Kotlin is vergelijkbaar met de statische geneste klasse in Java.

Wanneer u in Java een klasse binnen een andere klasse declareert, wordt deze standaard een innerlijke klasse. In Kotlin moet je echter de innerlijke modifier gebruiken om een ​​innerlijke klasse te maken die we hierna zullen bespreken.

Kotlin innerlijke klasse

De geneste klassen in Kotlin hebben geen toegang tot de instantie van de buitenste klasse. Bijvoorbeeld,

 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()) )

De bovenstaande code zal niet compileren omdat we hebben geprobeerd toegang te krijgen tot de eigenschap foo van de buitenste klasse vanuit de geneste klasse.

Om dit probleem op te lossen, moet u de geneste klasse markeren met inner om een ​​innerlijke klasse te maken. Innerlijke klassen dragen een verwijzing naar een buitenste klasse en hebben toegang tot leden van de buitenste klasse.

Voorbeeld: 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())") )

Wanneer u het programma uitvoert, is de uitvoer:

Buitenste object gebruiken: buiten geneste klasse. Binnenobject gebruiken: buiten geneste klasse.

Aanbevolen literatuur: anonieme innerlijke klasse

Interessante artikelen...