Zwischen Java 5 und Java 6 wurden die Regeln für @Override
Annotationen für Methoden, die von Schnittstellen (im Gegensatz zu Superklassen) stammen, geändert - bevor sie nicht erlaubt waren, aber danach. Sie sind jedoch nicht erforderlich von javac.Wie kann ich fehlende @Override-Annotationen statisch erkennen?
Einige IDEs, wie Eclipse, können Fehler oder Warnungen für solche fehlenden Außerkraftsetzungen generieren. Ich suche nach einem statischen Analyse-Tool, das fehlende Überschreibungen erkennen kann, sodass ich sie programmgesteuert melden/blockieren kann.
Es scheint nicht irgendeine der großen, die ich kenne wie Findbugs, und so kann es tun - wahrscheinlich, weil @Override
nur Quell-Retention-Ebene hat, so ist nicht in .Class-Dateien, auf denen diese Werkzeuge Operate und Source-Level-Tools wie Checkstyle verstehen die gesamte Klassenhierarchie nicht.
Wenn ich Checkstyle aufrufen, gibt es keinen Platz für einen Klassenpfad. Das ist gut für checkstyle checks, aber wie würde checkstyle wissen, dass 'void doStuff()' die 'void doStuff()' Methode überschreibt, ohne Ihre Klassen zu haben (entweder im Quell- oder Klassenpfad). – emory
Ja genau, also abgesehen von dem Problem der Laufzeitspeicherung, checkstyle macht nur "lokale" Überprüfungen einer Datei und kann das wahrscheinlich nicht erfassen. – BeeOnRope
Ich verstehe nicht, warum die Aufbewahrung ein Problem ist. Der Prüfer benötigt Zugriff auf Ihren Quellcode und die Klassendateien Ihrer Abhängigkeiten. Es benötigt keinen Zugriff auf den Quellcode Ihrer Abhängigkeiten. (Wenn Sie im Quellcode ein fehlendes '@ Override 'gefunden haben, das Sie nicht über Schreibrechte verfügen, was würden Sie tun?) – emory