Kotlin nestet og indre klasse

I denne artikel lærer du at arbejde med indlejrede og indre klasser ved hjælp af eksempler.

Kotlin nestet klasse

På samme måde som Java giver Kotlin dig mulighed for at definere en klasse inden for en anden klasse, der er kendt som indlejret klasse.

 klasse Ydre (… klasse Indlejret (…))

Da Nested-klassen er medlem af den lukkende klasse Ydre, kan du bruge .notation til at få adgang til Nestedklassen og dens medlemmer.

Eksempel: Kotlin nestet 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()) )

Når du kører programmet, vil output være:

Inde i nestet klasse. Funktionsopkald indefra Indlejret klasse.

For Java-brugere

Den nestede klasse i Kotlin svarer til den statiske nestede klasse i Java.

Når du erklærer en klasse i Java i Java, bliver den som standard en indre klasse. Men i Kotlin skal du bruge indre modifikator til at skabe en indre klasse, som vi vil diskutere næste.

Kotlin indre klasse

De indlejrede klasser i Kotlin har ikke adgang til den ydre klasseinstans. For eksempel,

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

Ovenstående kode kompileres ikke, fordi vi forsøgte at få adgang til foo-ejendom af Ydre klasse indefra Nestet klasse.

For at løse dette problem skal du markere den indlejrede klasse med indre for at skabe en indre klasse. Indre klasser har en henvisning til en ydre klasse og har adgang til de ydre klassemedlemmer.

Eksempel: Kotlin indre klasse

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

Når du kører programmet, vil output være:

Brug af ydre objekt: Udenfor indlejret klasse. Brug af indre genstand: Udenfor indlejret klasse.

Anbefalet læsning: Anonym indre klasse

Interessante artikler...