Name Clash-Kompilierfehler beim Kompilieren in Java 7, funktioniert aber in Java 5

8
%Vor%

Oben Code kompiliert in Java 5, aber nicht in Java 7 warum? In Java 7 gibt es "Name clash: Die Methode convert (Collection) vom Typ StaticMethodChild hat das gleiche Löschen wie convert (Collection) vom Typ StaticMethodDemo, aber versteckt es nicht"

    
Dragon 25.09.2013, 07:00
quelle

2 Antworten

4

Abgesehen von stonedsquirrels Antwort würden Sie, selbst wenn die Methoden nicht statisch wären, den gleichen Fehler erhalten.

Dies liegt an Type Erasure. Sie würden versuchen, die Konvertierung mit einem inkompatiblen Typ zu überschreiben.

Überprüfen Sie die folgende Antwort für eine nette Erklärung.

    
aayoubi 25.09.2013 07:40
quelle
2

Java erlaubt das Überschreiben von statischen Methoden nicht. Siehe Warum erlaubt Java nicht das Überschreiben von statischen Methoden?

Sie können nur eine statische Methode in einer Unterklasse ausblenden. Ausblenden bedeutet, dass es nicht davon abhängt, um welchen Objekttyp es sich handelt, sondern um welche Art von Klasse. Siehe Ссылка

Nun ist das Problem, Ihre Unterklassenmethode hat formell die gleiche Signatur, aber wegen der generischen Typen wird sie nicht versteckt. Collection<? extends ArithmeticExpression> ist weder gleich noch ein Subtyp von Collection<? extends Expression> , wodurch ein korrektes, eindeutiges Verbergen praktisch verhindert wird. Wie Ayobi ausführte, wurde die Compiler-Regel eingeführt, um die Rückwärtskompatibilität zu gewährleisten: Methode hat die gleiche Löschung wie eine andere Methode im Typ

Ich kann es jetzt nicht für mich selbst ausprobieren, aber der Fehler sollte verschwinden, wenn beide die gleichen generischen Typen haben. Obwohl ich keine Ahnung habe, warum der Fehler in Java 5 nicht auftritt. Ich vermute, dass sie diese Compiler-Regel in einer späteren Version eingeführt haben, weil sie sie vorher nicht bemerkt haben.

    
André Stannek 25.09.2013 07:32
quelle

Tags und Links