Begründung für das Abschließen einer Methode

8

Entschuldige, schnelle Frage hier, habe gerade etwas in meinen Notizen gefunden, das ich nicht verstehe, wenn es darum geht, eine Methode endgültig zu machen. Meine Notizen behaupten, dass Sie aus diesem Grund eine Methode finalisieren sollten:

  

Erzwingt das Erzwingen von Invarianten.

     

Ein String sollte sich wie ein String verhalten.

Ich verstehe nicht wirklich, was damit gemeint ist. Kann jemand bitte es für mich brechen? Vielen Dank.

    
Albatross32 18.04.2011, 21:10
quelle

8 Antworten

7

Ich würde vermuten, dass das hätte gesagt werden müssen "Mach es möglich, Invarianten zu erzwingen". Wenn jemand eine Methode überschreiben kann, kann er Verhaltensweisen ändern, die sich auf die Invarianten der Klasse auswirken.

    
Konstantin Komissarchik 18.04.2011 21:11
quelle
3

Es gibt in der Regel zwei Gründe, um eine Methode endgültig, Leistung und Design zu machen. Wenn eine Methode endgültig ist, kann sie inline sein. Vor dem HotSpot-Kompilieren (JDK 1.1.x) wurden diese Methoden zur Kompilierungszeit normalerweise inline, während sie bei HotSpot zur Laufzeit inline sind, es sei denn, der Compiler kann garantieren, dass die inlined-Methode immer zusammen mit dem Code kompiliert wird. Es gibt zwei Gründe, die ich kenne, um eine lokale Variable oder einen Parameter final zu machen. Der erste Grund ist, dass Sie nicht möchten, dass Ihr Code die lokale Variable oder den lokalen Parameter ändert. Es wird von vielen als ein schlechter Stil angesehen, einen Parameter innerhalb einer Methode zu ändern, da er den Code unklar macht. Gewöhnlich machen einige Programmierer alle ihre Parameter "endgültig", um sich selbst davon abzuhalten, sie zu ändern. Ich tue das nicht, da ich finde, dass es meine Methodensignatur ein bisschen hässlich macht.

Der zweite Grund kommt, wenn wir von einer inneren Klasse auf eine lokale Variable oder einen lokalen Parameter zugreifen wollen. Dies ist der eigentliche Grund, soweit ich weiß, dass letzte lokale Variablen und Parameter in Java in JDK 1.1 eingeführt wurden. Quelle

    
Vik Gamov 18.04.2011 21:15
quelle
1

Ja, im Grunde macht alles etwas Sinnloses, dass du es nicht ändern kannst. Mit derselben Argumentation würde man eine Methode innerhalb einer Klasse final machen, um es anderen Unterklassen unmöglich zu machen, die Funktionalität dieser Methode zu überschreiben. Dies gilt für Situationen, in denen Sie unbedingt möchten, dass diese eine Funktion immer diese eine Sache macht.

    
Vinay 18.04.2011 21:15
quelle
1

Ihre Notizen könnten mehr Sinn ergeben, wenn sie lesen:

  

Eine abschließende Methode macht möglich Invarianten zu erzwingen.

Mit anderen Worten: Wenn Sie eine Methode finalisieren, wird sichergestellt, dass sie den Wert zurückgibt, den Sie meinen, anstatt einen überschriebenen Wert zurückzugeben, den jemand anders fälschlicherweise für richtig gehalten hat.

    
elekwent 18.04.2011 21:23
quelle
0

Diese Notizen machen nicht viel Sinn - ich denke, unmöglich sollte "möglich" sein. Wenn Sie nicht möchten, dass Unterklassen das Verhalten einer Methode ändern, können Sie die Methode als endgültig markieren und sie nicht überschreiben. Dies gibt eine feinkörnigere Kontrolle als das Markieren der gesamten Klasse als endgültig.

    
I82Much 18.04.2011 21:12
quelle
0

Wenn Sie eine Methode endgültig machen, können Sie diese Methode in einer Unterklasse nicht überschreiben.

Wenn das Verhalten Ihrer Anwendung davon abhängt, dass sich eine bestimmte Methode in einer bestimmten Weise genau verhält und Sie nicht möchten, dass andere Entwickler dieses Verhalten ändern, können Sie das "final" verwenden 'Schlüsselwort.

    
Joe 18.04.2011 21:18
quelle
0

A String kann bei seiner Erstellung nicht geändert werden. Das bedeutet, dass alle internen Felder als final deklariert sind und keine Methode zur Aktualisierung des internen Inhalts bietet. Wenn Sie also eine Zeichenfolge als "Ich bin Zeichenfolge" deklarieren, wissen Sie, dass die von Ihnen angegebene Zeichenfolge diesen Wert bis zum Ende der Zeit enthält.

Eine Methode sollte als endgültig definiert werden, wenn die Methode nicht von einer Klasse überschrieben werden soll, die Ihre Klasse erweitert. Eine Klasse, die nur finale Methoden enthält, kann immer noch änderbar sein, wenn eine dieser Methoden die Variablen innerhalb der Klasse ändert.

Ich benutze gerne unmodifizierbare Klassen, es hilft mir, jederzeit den Zustand meines Programms zu kennen und Bugs zu verhindern, die schwer zu finden wären.

    
Ravi Wallau 18.04.2011 21:26
quelle
0
%Vor%

Druckt "Nicht A: A"

Wenn die super class Methode "print (" war endgültig) konnte dieser Typ Fehler nicht passieren.

Via final können Sie diese Methode erzwingen, die unverändert bleibt, damit A immer glücklich sein kann, "A"

druckend     
Gunnar Hoffman 18.04.2011 22:54
quelle

Tags und Links