Ich habe gesehen, dass manchmal Methoden in einer Klasse, die nicht vom Instanzstatus abhängen, als markiert sind. Ich stelle fest, dass es dadurch deutlich wird, dass es ankündigt, dass "diese Methode unabhängig vom Instanzzustand ist". Es ist leicht, diese Methode vollständig zu überspringen, wenn Sie nach Chancen auf einen inkonsistenten Zustand suchen.Markierungsmethoden, die den Instanzstatus nicht lesen/schreiben
Das Problem beim Markieren der Methode static besteht jedoch darin, dass statische Methoden nicht vererbt oder außer Kraft gesetzt werden können.
So etwas wird hier diskutiert: Does it make sense to have a non static method which does not use an instance variable?
Wäre es sinnvoll eine Anmerkung zu haben, zu erklären, dass eine nicht-statische Methode staatlich unabhängig ist? Dann könnte der Compiler überprüfen, dass er nur andere zustandsunabhängige Methoden verwendet.
Gibt es eine solche Funktion in der Pipeline?
Sicher wäre. Deshalb hat C++ * const *. Vielleicht möchten Sie überprüfen, ob jemand eine Anfrage in den Java-Community-Prozess gestellt hat. wenn nicht; fang an ;-) ... aber ernsthaft - die andere Sicht auf * static * ist: es ist eine Anomalie innerhalb von OO. Neben den genannten Problemen führen statische Aufrufe auch zu einer engeren Kopplung; und Code, der schwieriger zu testen ist. Der Punkt ist also: Sie vermeiden es wo es möglich ist. – GhostCat
@GhostCat Beachten Sie, dass dies anders als C++ const ist, dies schlägt grundsätzlich eine überschreibbare/virtuelle statische Methode vor. – hyde
@hyde Ja ... Wenn ich zwei Parameter an eine Methode übergebe und einen Rückgabewert erhalte, möchte ich manchmal sicher sein, dass (1) die Methode nur diese beiden Eingaben von dieser Klasse verwendet und (2) nicht mutieren den Zustand in irgendeiner Weise. – Teddy