Generische Rückgabetypen in Java
In Java sind Generika ein leistungsstarkes Werkzeug zum Schreiben von typsicherem Code. Das Problem generischer Rückgabetypen kann jedoch eine Herausforderung darstellen, insbesondere wenn es um Hierarchien von Klassen mit unterschiedlichem Verhalten geht. Dieser Artikel untersucht das Problem und bietet eine Lösung, um die Notwendigkeit einer expliziten Typumwandlung zu beseitigen.
Das Problem tritt auf, wenn mit einer Basisklasse (z. B. Animal) und ihren Unterklassen (z. B. Dog, Duck, Mouse) gearbeitet wird. Im bereitgestellten Beispiel definiert die Basisklasse Animal eine Methode callFriend, die ein Animal-Objekt zurückgibt. In der Praxis möchten wir jedoch möglicherweise Methoden aufrufen, die für die Unterklassen spezifisch sind, z. B. bark() für Dog oder quack() für Duck.
Um die Notwendigkeit einer manuellen Typumwandlung zu vermeiden, können wir eine generische Rückgabe definieren Typ für die callFriend-Methode:
public <T extends Animal> T callFriend(String name) { return (T) friends.get(name); }
Diese Lösung übermittelt den erwarteten Rückgabetyp an den Compiler, führt jedoch einen nicht verwendeten Parameter usedTypeObj ein. Um dies zu beheben, können wir die Methode so ändern, dass sie ein Klassenobjekt akzeptiert, das den gewünschten Rückgabetyp darstellt:
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
Dann können wir die Methode aufrufen und die spezifische Unterklasse als Argument bereitstellen:
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
Diese Lösung vermeidet die Notwendigkeit einer expliziten Typumwandlung und verbessert die Typsicherheit des Codes. Es ist jedoch wichtig zu beachten, dass dieser Ansatz erfordert, dass der Compiler überprüft, ob das bereitgestellte Class-Objekt eine gültige Unterklasse von Animal ist, was zu einigen Einschränkungen führen kann. Dennoch bietet es eine flexible und effektive Möglichkeit, generische Rückgabetypen in Java zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann ich eine explizite Typumwandlung mit generischen Rückgabetypen in Java vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!