498 Stimmen

Wann verwenden Sie die @Override-Anmerkung von Java und warum?

Was sind die besten Praktiken für die Verwendung von Javas @Override Anmerkung und warum?

Es scheint, als wäre es übertrieben, jede einzelne überschriebene Methode mit dem @Override Bemerkung. Gibt es bestimmte Programmiersituationen, die die Verwendung der @Override und andere, die niemals die @Override ?

5voto

Hank Gay Punkte 67607

Ich benutze sie jedes Mal. Es sind mehr Informationen, die ich nutzen kann, um schnell herauszufinden, was los ist, wenn ich den Code in einem Jahr wieder aufrufe und ich vergessen habe, was ich beim ersten Mal gedacht habe.

5voto

jai Punkte 20539
  • Wird nur bei Methodendeklarationen verwendet.
  • Zeigt an, dass die kommentierte Methode Deklaration eine Deklaration im Supertyp überschreibt.

Bei konsequenter Anwendung schützt es Sie vor einer großen Zahl von ruchlosen Fehlern.

Verwenden Sie die @Override-Anmerkung, um diese Fehler zu vermeiden: (Erkennen Sie den Fehler im folgenden Code:)

public class Bigram {
    private final char first;
    private final char second;
    public Bigram(char first, char second) {
        this.first  = first;
        this.second = second;
    }
    public boolean equals(Bigram b) {
        return b.first == first && b.second == second;
    }
    public int hashCode() {
        return 31 * first + second;
    }

    public static void main(String[] args) {
        Set<Bigram> s = new HashSet<Bigram>();
        for (int i = 0; i < 10; i++)
            for (char ch = 'a'; ch <= 'z'; ch++)
                s.add(new Bigram(ch, ch));
        System.out.println(s.size());
    }
}

fuente: Leistungsfähiges Java

3voto

Horatiu Jeflea Punkte 6930

Seien Sie vorsichtig, wenn Sie Override verwenden, weil Sie danach kein Reverse Engineering in starUML durchführen können; erstellen Sie zuerst die uml.

2voto

seh Punkte 14708

Es scheint, dass sich die Weisheit hier ändert. Heute habe ich installiert IntelliJ IDEA 9 und stellte fest, dass sein " fehlende @Override-Inspektion " fängt jetzt nicht nur implementierte abstrakte Methoden, sondern auch implementierte Schnittstellenmethoden. In der Codebasis meines Arbeitgebers und in meinen eigenen Projekten habe ich lange Zeit die Gewohnheit gehabt, @Override nur für erstere zu verwenden - implementierte abstrakte Methoden. Wenn ich diese Gewohnheit jedoch überdenke, wird der Vorteil der Verwendung von Annotationen in beiden Fällen deutlich. Obwohl es ausführlicher ist, schützt es vor dem zerbrechliche Basisklasse Problem (nicht so gravierend wie in C++), bei dem sich der Name der Schnittstellenmethode ändert und die Methode, die sie implementieren soll, in einer abgeleiteten Klasse verwaist.

Natürlich ist dieses Szenario größtenteils übertrieben; die abgeleitete Klasse würde nicht mehr kompiliert werden, da ihr nun eine Implementierung der umbenannten Schnittstellenmethode fehlt, und heute würde man wahrscheinlich eine Methode umbenennen Refactoring-Operation, um die gesamte Code-Basis en masse zu bearbeiten.

Da IDEAs Inspektion nicht so konfiguriert werden kann, dass implementierte Schnittstellenmethoden ignoriert werden, werde ich heute sowohl meine Gewohnheit als auch die Code-Review-Kriterien meines Teams ändern.

2voto

lzlstyle Punkte 373

Die Annotation @Override wird verwendet, um zu überprüfen, ob der Entwickler die richtige Methode in der übergeordneten Klasse oder Schnittstelle überschreiben möchte. Wenn sich der Name der Super-Methoden ändert, kann der Compiler diesen Fall melden, was nur dazu dient, die Konsistenz mit der Super- und der Unterklasse zu wahren.

Übrigens, wenn wir die Annotation @Override in der Unterklasse nicht ankündigen, aber einige Methoden der Superklasse überschreiben, dann kann die Funktion wie diejenige mit dem @Override funktionieren. Aber diese Methode kann den Entwickler nicht benachrichtigen, wenn die Methode der Superklasse geändert wurde. Denn sie kennt die Absicht des Entwicklers nicht - die Methode der Superklasse außer Kraft setzen oder eine neue Methode definieren?

Wenn wir also diese Methode überschreiben wollen, um den Polymorphismus zu nutzen, müssen wir @Override über der Methode hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X