private Zeichenfolge oder öffentliche statische Zeichenfolge?

8

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.

    
WereWolfBoy 28.03.2013, 12:46
quelle

8 Antworten

7

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.

    
MD Sayem Ahmed 28.03.2013, 12:49
quelle
4

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.

    
Deepak Bala 28.03.2013 12:53
quelle
1

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

    
tmwanik 28.03.2013 12:50
quelle
1

Du solltest auf jeden Fall einen Getter haben und dein Feld privat machen. Das nennen wir Verkapselung.

Auch indem Sie es endgültig machen und keinen Setter haben, ist Ihr Objekt unveränderlich, was eine sehr gute Sache für die parallele Programmierung ist.

    
tibo 28.03.2013 12:50
quelle
1

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.

    
Egor 28.03.2013 12:51
quelle
1
  

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.

    
Sajmon 28.03.2013 12:49
quelle
1

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.

    
Mr Spoon 28.03.2013 12:59
quelle
0

Ich denke, es kommt darauf an. Zum Beispiel: Wenn Sie Getter verwenden - Sie können es überschreiben. Manchmal ist es sehr nützlich.

    
shapkin 28.03.2013 13:06
quelle

Tags und Links