Heim > Java > javaLernprogramm > Wie kann ich eine explizite Typumwandlung mit generischen Rückgabetypen in Java vermeiden?

Wie kann ich eine explizite Typumwandlung mit generischen Rückgabetypen in Java vermeiden?

Barbara Streisand
Freigeben: 2024-12-16 06:22:13
Original
609 Leute haben es durchsucht

How Can I Avoid Explicit Typecasting with Generic Return Types in Java?

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

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

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

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!

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