Generics

Generics sind ein wichtiges Konzept in Java, das es ermöglicht, Klassen, Schnittstellen und Methoden zu definieren, die mit einem Platzhaltertyp arbeiten. Dies erhöht die Wiederverwendbarkeit und Typensicherheit des Codes. Generics ermöglichen es Ihnen, eine Klasse oder Methode zu erstellen, die mit verschiedenen Datentypen arbeiten kann, ohne dass Sie für jeden Datentyp eine separate Implementierung schreiben müssen.

1. Sortieren mit Comparable

Wichtig

Erstellen Sie eine Klasse Bier mit den Attributen name, herkunft und flascheninhalt mit zugehöriger toString(), Konstruktoren sowie Standardzugriffsmethoden (Getter/Setter). Nutzen Sie das in der Vorlesung vorgestellte Interface Comparable mit der Methode compareTo(T o), um Bier nach dem Attribut name zu sortieren. Implementieren Sie ein Hauptprogramm, welches 4 Bier-Objekte erzeugt, in einem Array ablegt und diese ausgibt. Anschließend sortieren Sie das Array und geben sie erneut aus.

image shows two beer mugs with a lot of foam

2. Fehlersuche

Bemerkung

In den folgenden Codebeispielen sind Fehler versteckt. Finden Sie den/die Fehler (ohne Nutzung einer IDE, nur durch Überlegung) und begründen Sie, warum hier Fehler auftreten. Überlegen Sie sich ebenfalls, wie der oder die Fehler verbessert werden können, so dass das Programm bzw. der Code-Snippet lauffähig wird.

Fehlerbeispiel 1

1ArrayList someList = new ArrayList();
2someList.add("A");
3someList.add("B");
4someList.add(2022);
5for (String toPrint : someList) {
6    System.out.println(toPrint);
7}

Fehlerbeispiel 2

1public class Person {
2    public Person() {
3    }
4}
 1import java.util.ArrayList;
 2public class FSpieler<S, T> extends Person {
 3    private S name;
 4    private T trikotNr;
 5    public FSpieler(S name, T nr) {
 6        this.name = name;
 7        this.trikotNr = nr;
 8    }
 9    public static void main(String[] args) {
10        ArrayList<FSpieler<Person, Integer>> spielerListeFCB = new ArrayList<>();
11        FSpieler<String, Integer> lewandowski = new FSpieler<Person, Integer>(new Person("Lewandowksi"), 9);
12        spielerListeFCB.add(lewandowski);
13        FSpieler<String, Integer> neuer = new FSpieler<>("Neuer", 1);
14        spielerListeFCB.add(neuer);
15    }
16}

3. Generischer Taschenrechner

Schreiben Sie ein generisches Interface ICalc<…> (für einen Taschenrechner), welches für die vier Grundrechenarten (addieren, subtrahieren, multiplizieren und dividieren) jeweils eine generische Methode anbietet. Berechnungen mittels der Methoden des Interfaces sollen natürlich nur mit Zahlentypen möglich sein, die vom Typ java.lang.Number sind. Schreiben Sie eine Klasse IntegerCalculator, welches Ihr Interface für Integer-Werte implementiert.

Wichtig

Testen Sie Ihr Programm entsprechend.

4. Generische Sammlung von Objekten

Erstellen Sie eine generische Klasse MyGenericCollection<T>, die eine ArrayList von Objekten des Typs T enthält.

  1. Implementieren Sie die folgenden Methoden:

    • void add(T item): Fügt ein Element zur Sammlung hinzu.

    • boolean remove(T item): Entfernt ein Element aus der Sammlung. Gibt true zurück, wenn das Element erfolgreich entfernt wurde, andernfalls false.

    • T get(int index): Gibt das Element an der angegebenen Position zurück.

    • int size(): Gibt die Anzahl der Elemente in der Sammlung zurück.

  2. Interface definieren:

    • Definieren Sie ein Interface Describable, das eine Methode String describe() enthält. Diese Methode sollte eine Beschreibung des Objekts zurückgeben.

  3. Abstrakte Klasse erstellen:

    • Erstellen Sie eine abstrakte Klasse Animal, die das Interface Describable implementiert. Fügen Sie eine Methode String getSound() hinzu, die den Laut des Tieres zurückgibt.

    • Erstellen Sie zwei konkrete Klassen Dog und Cat, die von Animal erben und die Methoden describe() und getSound() implementieren.

  4. Testen Sie Ihre Implementierung:

    • Erstellen Sie eine Instanz von MyGenericCollection<Animal>.

    • Fügen Sie einige Dog- und Cat-Objekte zur Sammlung hinzu.

    • Geben Sie die Beschreibungen und Geräusche der Tiere in der Sammlung aus.