Generische Klassen erlauben das Implementieren von einer Funktionalität für verschiedene Dateitypen. In dieser Aufgabe sollen Sie einen `Pokedex<T>` implementieren. Ein Pokedex ist eine Sammlung an Pokemon, welche ein Pokemontrainer besitzt. Sie sollen einen Pokedex mit Tausch-Funktionen für ein Spiel entwickeln. Da diese Funktionalität in vielen Spielen gebraucht wird (z.B. einem Pokemon-Kartenspiel oder Pokemon-Snap), soll die Klasse generisch implementiert werden, um mit verschiedensten Datentypen nutzbar zu sein.
1. Erstellen Sie ein Interface „Nameable“. Dieses soll eine Methode besitzen, welche einen String mit einem eindeutigen Namen der Klasse zurück gibt. Implementieren Sie dieses Interface in der Pokemon-Klasse mit `return name;`.
2. Erstellen Sie eine Klasse `Pokedex<T extends Namable>`. Implementieren Sie die folgenden generischen Methoden:
*`void add(T namable)` fügt das übergeben Objekt dem Pokedex hinzu, falls es noch nicht vorhanden ist.
*`void swap(String name, Pokedex<T> other, String otherName)` tauscht zwei Objekte. Das Objekt mit dem Namen `name` soll in den `other`\-Pokedex verschoben werden. Das Objekt das mit dem Namen `otherName` im Pokedex `other` soll in den eigenen Pokedex (d.h. `this`) verschoben werden.
*`Set<T> getUniqueObjectsOf(Pokedex<T> other)` gibt ein Set mit allen Objekten aus `other` aus, welche nicht im eigenen Pokedex vorhanden sind.
Sie dürfen innerhalb von `Pokedex` die Objekte in einer Collection oder Map speichern.
Erstellen Sie zum Testen eine Main-Methode, welche zwei `Pokedex<Pokemon>`\-Objekte erstellt und mit Inhalten füllt. Zeigen Sie mithilfe eines Code-Beispieles, dass Ihre implementierten Methoden funktionieren. Sie können dazu die `toString()`\-Funktion ähnlich wie in der `Team`\-Klasse umschreiben.
_formatted by [Markdeep 1.14](https://casual-effects.com/markdeep)_