ProgrammatieKotlin ontwikkelaar

Leg de nuances van zichtbaarheid en de afstammingsconstructors in Kotlin uit: wat zijn de verschillen tussen primaire en secundaire constructors, nuances met betrekking tot erfelijkheid en zichtbaarheidmodificatoren. Geef codevoorbeelden en typische fouten.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Kotlin kan elke klasse één primaire constructor hebben (gegeven in de klasseverklaring) en meerdere secundaire constructors (via constructor).

  • De primaire constructor kan geen code buiten de verklaring bevatten (de logica staat in init).
  • Secundaire constructors implementeren extra initiatieopties.
  • Als de ouder geen constructor zonder parameters heeft, moet de afstammeling zijn constructor expliciet aanroepen.
  • Met behulp van modificatoren (private, protected, internal, public) kunnen constructors verborgen of beperkt worden in zichtbaarheid.

Voorbeeld met primaire en secundaire constructors:

open class Person(val name: String) { constructor(name: String, age: Int) : this(name) { // secundaire constructor } } class Employee : Person { constructor(name: String) : super(name) // Expliciete super vereist }

Zichtbaarheidmodificatoren:

class Secret private constructor() { companion object { fun create() = Secret() } } val s = Secret.create() // Ok, maar Secret() - fout

Nuances:

  • Als een klasse met een primaire constructor parameters heeft, is het onmogelijk om over te erven zonder deze parameters door te geven.
  • Secundaire constructors moeten de primaire of rechtstreeks aanroepen.
  • Geneste klassen hebben geen toegang tot de private constructor van de externe klasse.

Vraag met een valstrik.

Is het mogelijk om een klasse in Kotlin te erven zonder de primaire constructor aan te roepen?

Antwoord: Nee. In Kotlin moet bij het erven altijd minstens één constructor van de ouder worden aangeroepen - ofwel de primaire, ofwel de secundaire (via super()).

Voorbeeld:

open class A(val x: Int) class B: A // Fout: vereist expliciete aanroep van de constructor A

Voorbeelden van echte fouten door onwetendheid over de nuances van het onderwerp.


Verhaal

In het team probeerden ze het rechtstreeks aanmaken van objecten van de klasse te verbieden en maakten de constructor private. Ze vergaten echter een fabrieksmethode te implementeren. Dit leidde tot de onmogelijkheid om de klasse zonder reflectie te testen en blokkeerde de CI.


Verhaal

Ze erfden een klasse met verplichte parameters in de primaire constructor, maar gaven ze niet door bij het verklaren van de afstammeling. Dit werd pas in de compilatiefase ontdekt na langdurige debugging.


Verhaal

Bij het gebruik van secundaire constructors vergaten ze dat ze allemaal de primaire moeten aanroepen. Dit resulteerde in objecten die werden geïnitialiseerd zonder de benodigde parameters, wat leidde tot een NullPointerException tijdens runtime.