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
Susan SarandonOriginal
2024-12-24 00:19:10281Durchsuche

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();

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!

Stellungnahme:
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