Heim >Java >javaLernprogramm >Warum schränkt Java Methoden mit identischer generischer Typlöschung ein?

Warum schränkt Java Methoden mit identischer generischer Typlöschung ein?

DDD
DDDOriginal
2024-12-15 00:36:22646Durchsuche

Why Does Java Restrict Methods with Identical Generic Type Erasure?

Mehrdeutigkeit bei der Methodenlöschung: Warum Java ähnliche Methodensignaturen einschränkt

Der Java-Compiler gibt den Fehler „Methode add(Set) hat die gleiche Löschung aus.“ „add(Set) as another method in type Test“ wenn zwei Methoden mit identischer generischer Typlöschung in derselben deklariert sind Klasse:

class Test {
    void add(Set<Integer> ii) {}
    void add(Set<String> ss) {}
}

Diese Einschränkung ergibt sich aus dem Wunsch, Konflikte in Legacy-Code zu vermeiden, der Rohtypen verwendet. Vor Generika empfingen und gaben Methoden Rohtypen zurück, wie zum Beispiel:

class CollectionConverter {
    List toList(Collection c) {...}
}

Bei der Erweiterung einer solchen Klasse nach der Einführung von Generika betrachteten die Sprachdesigner Rohtypen als „override-äquivalent“ zu generischen Typen. Dadurch konnten Methoden überschrieben werden, ohne ihre Signaturen zu ändern, wodurch die Abwärtskompatibilität sichergestellt wurde.

Wenn jedoch mehrere Methoden mit unterschiedlichen generischen Signaturen zulässig wären, könnte es in Fällen, in denen weiterhin Rohtypen verwendet werden, zu Mehrdeutigkeiten kommen. Wenn eine Klasse beispielsweise eine generische Methode zu einer vorhandenen Rohmethode hinzufügt und eine Methode einer Oberklasse überschreibt, kann der Compiler nicht entscheiden, welche Methode aufgerufen werden soll.

Um diese potenzielle Verwirrung zu beseitigen, verbietet Java die Verwendung von Klassen Mehrere Methoden mit derselben Löschung, wodurch die Einführung solcher Mehrdeutigkeiten verhindert wird.

Obwohl diese Regel in Szenarien wie der Übergabe verschiedener generischer Satztypen unpraktisch erscheinen mag, ist sie eine notwendige Schutzmaßnahme zur Aufrechterhaltung der Kompatibilität mit Legacy-Code. Ohne sie könnte ein Upgrade des Codes zur Verwendung von Generika dazu führen, dass vorhandener Code beschädigt wird, der auf Rohtypen basiert.

Das obige ist der detaillierte Inhalt vonWarum schränkt Java Methoden mit identischer generischer Typlöschung ein?. 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