Direct naar de hoofdinhoud
Module 6 · Les 2 van 212/14 in de cursus~15 min
Modulelessen (2/2)

Generieken op Java

Generics (Generic Types) zijn in Java geïntroduceerd om ervoor te zorgen dat klassen, interfaces en methoden op verschillende typen als parameters kunnen werken. Dit garandeert de veiligheid tijdens het compileren en vermijdt dure expliciete casts tijdens runtime.

Generieke klassen

Een generieke klasse wordt gedefinieerd met punthaken <T> waarbij T fungeert als tijdelijke aanduiding voor een type dat wordt gespecificeerd wanneer de klasse wordt geïnstantieerd.

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Bij het maken van een Box object specificeren we het daadwerkelijke type:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

Generieke methoden

U kunt één generieke methode definiëren die verschillende typeparameters kan accepteren. De parameter type wordt vóór het retourtype van de methode geplaatst.

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Jokertekens en begrensde typen

We kunnen de door een generiek geaccepteerde typen beperken met behulp van het trefwoord extends (bovengrens) om een ​​specifiek type of zijn subklassen te accepteren.

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

Probeer het zelf

Oefening#java.m6.l2.e1
Pogingen: 0Laden…

Voltooi de generieke klasse Box door de getter getValue() te definiëren die T retourneert en de setter setValue(T value) die de waarde van de privévariabele instelt.

Editor laden…
Toon hint

Schrijf de methoden met de juiste handtekening met behulp van de generieke typeparameter `T`.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m6.l2.e2
Pogingen: 0Laden…

Maak een statische algemene methode printArray die een array van het type T[] met de naam array gebruikt en elk element afdrukt met behulp van een for-each-lus.

Editor laden…
Toon hint

De typeparameter `<T>` moet onmiddellijk na `static` en vóór het retourtype `void` worden geplaatst.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m6.l2.e3
Pogingen: 0Laden…

Maak een statische klasse StringContainer die de Container-interface implementeert die is geparametriseerd met String. Definieer een constructor die een String-parameter nodig heeft en implementeer de getItem() -methode.

Editor laden…
Toon hint

Vervang het generieke type `T` door `String` in de klassehandtekening en in het retourtype `getItem()`.

Oplossing beschikbaar na 3 pogingen