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.
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.
Tags und Links java compiler-errors