Heim >Java >javaLernprogramm >Wie können Generics die Typumwandlung beim Abrufen von Objekten aus heterogenen Sammlungen eliminieren?
Typumwandlung mit Generika in Rückgabetypen überwinden
Bei der OOP-Programmierung verwalten Klassen häufig Sammlungen verwandter Objekte. Beispielsweise könnte eine Tierklasse eine Liste von Freunden verfolgen, die Instanzen verschiedener Unterklassen wie Hund und Ente sein können.
Traditionell erfordert das Abrufen bestimmter Freunde aus dieser Liste aufgrund der Heterogenität von eine Typumwandlung die Sammlung. Dies führt zu Code wie:
Mouse jerry = new Mouse(); jerry.addFriend("spike", new Dog()); jerry.addFriend("quacker", new Duck()); ((Dog) jerry.callFriend("spike")).bark(); ((Duck) jerry.callFriend("quacker")).quack();
Um diese umständliche Typumwandlung zu vermeiden, sollten Sie die Verwendung von Generika in Betracht ziehen, um den Rückgabetyp der callFriend-Methode spezifisch für die richtige Unterklasse zu machen. In diesem speziellen Szenario ist die Angabe des Rückgabetyps als Parameter wie:
public <T extends Animal> T callFriend(String name, T unusedTypeObj) { return (T)friends.get(name); }
jedoch nicht hilfreich, da der nicht verwendete Typparameter zur Laufzeit keine zusätzlichen Informationen bereitstellt.
Stattdessen eine Problemumgehung beinhaltet die Übergabe der Klasse des gewünschten Typs als Argument an callFriend:
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
Mit dieser Implementierung wird die Methode aufgerufen wird zu:
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
Diese Lösung eliminiert die Typumwandlung zur Laufzeit und stellt sicher, dass das zurückgegebene Objekt sicher in die gewünschte Unterklasse umgewandelt werden kann.
Das obige ist der detaillierte Inhalt vonWie können Generics die Typumwandlung beim Abrufen von Objekten aus heterogenen Sammlungen eliminieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!