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.
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.
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, andernfallsfalse.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.
Interface definieren:
Definieren Sie ein Interface
Describable, das eine MethodeString describe()enthält. Diese Methode sollte eine Beschreibung des Objekts zurückgeben.
Abstrakte Klasse erstellen:
Erstellen Sie eine abstrakte Klasse
Animal, die das InterfaceDescribableimplementiert. Fügen Sie eine MethodeString getSound()hinzu, die den Laut des Tieres zurückgibt.Erstellen Sie zwei konkrete Klassen
DogundCat, die vonAnimalerben und die Methodendescribe()undgetSound()implementieren.
Testen Sie Ihre Implementierung:
Erstellen Sie eine Instanz von
MyGenericCollection<Animal>.Fügen Sie einige
Dog- undCat-Objekte zur Sammlung hinzu.Geben Sie die Beschreibungen und Geräusche der Tiere in der Sammlung aus.