Gibt es eine Möglichkeit, die Verwendung von @Override Annotation zu erzwingen?Kann ich die explizite Verwendung von @Override erzwingen?
Nur um zu klären, ich frage nicht: „Wie kann ich eine Unterklasse zwingen, eine Methode zu implementieren“ (wie this):
public abstract class BaseClass {
public abstract void foo();
}
Ich frage zu diesem Szenario speziell:
public class AnnotatedSubclass extends BaseClass {
@Override
public void foo() {
System.out.println("I have @Override.");
}
}
public class NonAnnotatedSubclass extends BaseClass {
public void foo() {
System.out.println("I do not have @Override.");
}
}
Beachten Sie, dass beide kompilieren, obwohl NonAnnotatedSubclass
keine explizite @Override
Annotation hat. Gibt es eine Möglichkeit, dass der Compiler im Fall von NonAnnotatedSubclass
einen Fehler/eine Warnung auslöst?
Ich frage, weil manchmal, wenn ich Klassen erweitern versehentlich überschreiben Elternmethoden, weil sie Namen ähnlich denen haben, die ich erstellen würde (wie .paint()
in Swing).
Ihre IDE kann Ihnen sagen, wenn dies passiert und automatisch alle Methoden, die '@ Überschreiben, aber nicht. –
"'bezieht sich nicht auf abstrakte Methoden" Oh, aber Sie sollten sein, wenn es eine Methode in 'BaseClass' überschreibt. –
[Googles errorprone] (http://errorprone.info/bugpattern/MissingOverride) hat eine Überprüfung, um diese zur Kompilierzeit zu benötigen. –