1.4-Software-Development-Principles

Week 3 - Generics

Samenvatting

Over het algmeen, wanneer je een class ontwerpt, kies je meteen alle typen van alle klasse variabelen. Er zijn echter situaties waarin je deze keuze aan de gebruiker van jouw klasse over wilt laten. Bijvoorbeeld: Je wilt een lijststructuur aanbieden, maar je wil je niet binden aan een specifiek type dat deze lijst gaat opslaan.

Het enige alternatief dat je tot nu toe gezien hebt, is het schrijven van verschillende versies voor alle verschillende typen.

Merk overigens op dat je al generieke klassen gebruikt hebt:

private ArrayList<String> names;
private ArrayList<Student> students;

ArrayList is op zo’n manier geimplementeerd (DRY) dat je later kunt beslissen wat er daadwerkelijk opgeslagen wordt. Wanneer je dan deze lijst gebruikt, vul je zelf het type in dat opgeslagen gaat worden in jouw programma.

Je kunt op deze manier geen fouten maken met het type data dat opgeslagen wordt in de lijst:

students.add(new Chicken("This not allowed"));

IntelliJ zal je niet toestaan om deze fout te maken, je krijgt dan een foutmelding waarin ongeveer staat: “Hee! Jij hebt beloofd dat je alleen Studenten zou opslaan in deze lijst. Wat moet ik met die Kip?

Als je, op een later tijdstip, elementen uit de lijst haalt weet je ook welk type dat moet zijn:

Student x = students.get(i); // Geen probleem.

Chicken y = students.get(i); // Dit geeft problemen.

Theorie