Bei meinem Praktikum gab mir einer meiner Kollegen einen Hinweis. Ich möchte wissen, ob dies eine gute Praxis ist.
Was ich gemacht habe, war das Erstellen von Klassen, die nur für die Werte verwendet werden, die sie enthalten und keine Funktionen haben, die tatsächlich etwas tun (abgesehen von Getter, Setter und einem Konstruktor). Ich habe meine Variablen wie folgt deklariert:
%Vor%Ich verwende also keinen Setter, weil er immer gleich bleiben soll. Mein Kollege sagte, dass ich es auch so machen kann:
%Vor%Weil wir jetzt keine Getter oder Setter haben müssen, weil es öffentlich ist, aber es kann auch nie geändert werden, weil es endgültig ist.
Was wäre besser? Oder wäre es vielleicht vorzuziehen, es trotzdem privat, aber auch endgültig zu machen? Ich meine, alle Optionen funktionieren natürlich. Ich möchte nur wissen, was besser ist und warum.
Machen Sie die Variable privat, weil Sie die Variable darin einkapseln deine Klasse. Das hat viele Vorteile, das Verbergen von Informationen gehört zu den Dingen, die Sie lernen werden, wenn Sie zu dem obigen Link gehen. p>
Wenn Sie möchten, dass es sich nach der Erstellung nie ändert, dann machen Sie es auch endgültig.
Dies funktioniert jetzt, weil ein String
unveränderlich ist. Aber was passiert, wenn Sie den Verweis auf eine veränderbare Klasse verfügbar machen und diese Klasse nicht threadsicher ist? Sie können nicht einmal eine defensive Kopie zurückgeben, wenn Sie möchten.
Ganz zu schweigen davon, dass dies auch die Kapselung unterbricht. Verwenden Sie eine private Variable und getters.
Die Idee, einer Variablen keine Setter-Methode zur Verfügung zu stellen, macht sie zu einem schreibgeschützten Feld, das heißt, wir können nur lesen, aber nicht schreiben, also wird sie durch Verwendung des Schlüsselworts final
zu einer Konstante es alles.
Ich denke, eine Konstante ist besser. final
keyword verbessert die Leistung. Lesen Sie mehr hier
Eine korrekte Verwendung des Verkapselungsprinzips besteht darin, alle Klassenfelder als privat zu definieren und über Setter und Getter auf sie zuzugreifen. Darüber hinaus möchten Sie möglicherweise zusätzliche Logik hinzufügen, wenn Sie getName()
aufrufen. Während die zweite Variante manchmal verwendet wird, ist die erste besser. Hoffe, das hilft.
Was wäre besser? Oder wäre es vielleicht vorzuziehen, noch zu machen? Es ist privat, aber auch endgültig?
Wenn Sie erfolgreicher Entwickler sein wollen, sollten Sie richtig, effizient und das Wichtigste sicher programmieren. Sicherheit und Leistung stehen an erster Stelle.
Wenn Sie es öffentlich machen, werden Sie Kapselung brechen, das ist sehr wichtig und hat viele Vorteile. Jedes Mal, wenn du Eigentum von Object bekommen willst, werden Getter deine Freunde.
Generell sollten Sie keinen direkten Zugriff auf Objekteigenschaften haben (nur in Extremfällen, aber auch diese können besser gelöst werden). Getters und Setter sind für diese Zwecke bestimmt - bewahren Sie die Kapselung und behandeln Sie Objekte sicher.
final variables
werden normalerweise für Daten verwendet, die während einer Zeit nicht änderbar sind.
Ich denke, ihre Argumentation ist, dass public
den Code einfacher macht. Java wird dafür kritisiert, dass es in solchen Situationen zu weitschweifig ist. Über eine Sprache wie Javascript, wo dies (normalerweise) immer public
wäre.
Aber diese Einfachheit ist ein Kompromiss gegen sicheren, stabilen und erweiterbaren Code.
Um zu sehen, warum das wichtig ist, werfen Sie einen Blick auf ein großangelegtes Javascript-Projekt, das mit allem als öffentlich geschrieben wurde. Der Code jeder Klasse mag einfach sein ... aber ihre Beziehungen und die daraus resultierende Architektur sind letztendlich ein Albtraum, den man beibehalten muss.