it-swarm.com.de

private Zeichenfolge oder öffentliche statische Zeichenfolge?

Bei meinem Praktikum hat mir einer meiner Kollegen einen Tipp gegeben. Ich möchte wissen, ob dies eine gute Praxis ist.

Was ich tat, war das Erstellen von Klassen, die nur für die darin enthaltenen Werte verwendet werden und keine Funktionen haben, die tatsächlich etwas bewirken (abgesehen von Getigtern, Setters und einem Konstruktor. Ich habe meine Variablen folgendermaßen deklariert:

public class ObjectIUse{
  Private String name;

  public ObjectIUse(String name){
    this.name = name;
  }

  public String getName(){
    return name;
  }
}

Also verwende ich keinen Setter, da er immer gleich bleiben sollte. Mein Kollege sagte, dass ich es auch so machen kann:

public class ObjectIUse{
  public final String name;

  public ObjectIUse(String name){
    this.name = name;
  }
}

Weil wir jetzt keine Getter oder Setter brauchen, weil es öffentlich ist, aber es kann auch nie geändert werden, weil es endgültig ist. 

Welches wäre besser? Oder wäre es vielleicht vorzuziehen, es dennoch privat, aber auch endgültig zu machen? Ich meine, alle Optionen funktionieren offensichtlich. Ich möchte nur wissen, was besser ist und warum.

9
WereWolfBoy

Machen Sie die Variable als privat, weil Sie damit die Variable in Ihrer Klasse encapsulating . Dies hat viele Vorteile: versteckte Informationen gehören zu denjenigen, die Sie erfahren werden, wenn Sie den obigen Link aufrufen.

Wenn Sie möchten, dass es nach der Erstellung niemals geändert wird, machen Sie es auch endgültig.

7
MD Sayem Ahmed

Das funktioniert jetzt, weil eine String unveränderlich ist. Aber was passiert, wenn Sie den Verweis auf eine veränderliche Klasse freigeben 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 Verkapselung bricht. Verwenden Sie eine private Variable und Getter.

4
Deepak Bala

Ich denke, ihre Begründung ist, dass der Code einfacher gehalten wird, wenn er public ist. Java wird kritisiert, weil er in solchen Situationen zu wortreich ist. Über einer Sprache wie Javascript, in der dies normalerweise public wäre. 

Diese Einfachheit ist jedoch ein Kompromiss gegen sicheren, stabilen und erweiterbaren Code.

Um herauszufinden, warum das wichtig ist, werfen Sie einen Blick auf ein umfangreiches 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 Alptraum für die Aufrechterhaltung.

1
David Lavender

Welches wäre besser? Oder wäre es vielleicht besser zu machen. es privat aber auch endgültig?

Wenn Sie erfolgreicher Entwickler sein möchten, sollten Sie korrekt, effizient und vor allem sicher programmieren. Sicherheit und Leistung stehen an erster Stelle.

Wenn Sie es öffentlich machen, brechen Sie die Einkapselung das ist sehr wichtig und hat viele Vorteile. Jedes Mal, wenn Sie Eigentum von Object erhalten möchten, werden Getter zu Ihren Freunden. 

Im Allgemeinen sollten Sie keinen direkten Zugriff auf die Eigenschaften des Objekts haben (nur in extremen Fällen, aber auch diese können besser gelöst werden). Getter und Setter sind für diese Zwecke bestimmt - bewahren Sie die Kapselung auf und gehen Sie sicher mit Objekten um.

final variables wird normalerweise für Daten verwendet, die während einer Zeit nicht veränderbar sind.

1
Simon Dorociak

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. Wenn Sie also das final-Schlüsselwort verwenden, fassen Sie es zusammen.

Ich denke, eine Konstante ist besser. Das Schlüsselwort final verbessert die Leistung. Lesen Sie mehr hier

1
tmwanik

Sie sollten auf jeden Fall einen Getter haben und Ihr Feld privat machen. Das nennen wir Kapselung.

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

1
tibo

Das Prinzip der Kapselung besteht darin, alle Klassenfelder privat zu machen und über Setter und Getter darauf zuzugreifen. Ansonsten 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 Variante besser. Hoffe das hilft.

1
Egor

Ich denke es hängt davon ab. Zum Beispiel: Wenn Sie Getter verwenden, können Sie ihn überschreiben. Manchmal ist es sehr nützlich.

0
shapkin