Heim > Java > javaLernprogramm > Wie können Generics die Typumwandlung beim Abrufen von Objekten aus heterogenen Sammlungen eliminieren?

Wie können Generics die Typumwandlung beim Abrufen von Objekten aus heterogenen Sammlungen eliminieren?

Susan Sarandon
Freigeben: 2024-12-24 00:19:10
Original
320 Leute haben es durchsucht

How Can Generics Eliminate Typecasting When Retrieving Objects from Heterogeneous Collections?

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();
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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));
}
Nach dem Login kopieren

Mit dieser Implementierung wird die Methode aufgerufen wird zu:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage