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!