private String oder public static String?
In meinem Praktikum eine meiner Kolleginnen gab mir den Tipp. Ich möchte wissen, ob dies ist eine gute Praxis.
Was ich Tat, war die Schaffung von Klassen, die verwendet werden, nur für die Werte, die Sie enthalten, und keine Funktionen, die wirklich etwas tun (abgesehen davon, dass Getter, setter und Konstruktor). Als ich erklärte, dass meine Variablen wie diese:
public class ObjectIUse{
Private String name;
public ObjectIUse(String name){
this.name = name;
}
public String getName(){
return name;
}
}
So, ich bin nicht mit einem setter, denn es sollte immer die gleiche bleiben. Mein Kollege meinte, dass ich auch es so machen:
public class ObjectIUse{
public final String name;
public ObjectIUse(String name){
this.name = name;
}
}
Weil wir jetzt nicht brauchen, um alle Getter oder setter, weil es öffentlich ist, aber es kann auch nie geändert werden, weil es final ist.
Was wäre dann besser? Oder wäre es vielleicht besser sei, noch dass es private, sondern auch die Endpreise? Ich meine, alle Optionen funktionieren offensichtlich. Ich möchte nur wissen, was besser ist und warum.
- Machen Sie es privat. Machen Sie es endgültig.
- Was Sayem sagte. Public-member-Variablen sind "als schädlich." Wenn Ihr Objekt nicht ändern (wir sagen, dass es "unveränderlich"), erklären die member-variable
final
. Dies zwingt Sie, um es in den Konstruktor und die es verhindert, das zu ändern-selbst wenn jemand spiegelt Ihre Klasse-Instanz. - Das war auch was ich dachte wäre die bessere option. Was ist Ihre Argumentation?
- Als Gandalf sagt zu Frodo: "Keep it secret, keep it safe"
- private final BLABLABLA;
- android recomends verwenden public-Variablen anstelle von Getter und setter im Gegensatz zu java-Programmierung
- und warum ist es das?
- Zugriff auf eine variable direkt ist (potentiell) schneller als durch einen getter.
- finden Sie diese developer.android.com/training/articles/... es hat die details @WereWolfBoy
- sicher, es ist schneller... aber spielt es eine Rolle, dass viel? Es würde wahrscheinlich weniger sein, als ein (Bruchteil des) Millisekunde Unterschied... Itsn nicht Sicherheit ein wenig wichtiger als ein (Bruchteil des) Millisekunde?
- es hängt davon ab. Manchmal sind diese Millisekunden einen Unterschied machen, z.B. wenn Sie brauchen, um zu zeichnen Sie ein neues Bild alle 16ms zu erreichen 60fps oder mehr. Und manchmal muss man nur bündeln, die Daten in ein Objekt, um es z.B. in eine
List
. Diese Art der container-Objekte nicht brauchen klare Kapselung IMHO solange man Sie nur lokal. - android zuvor nicht inlining der get-und Set-Methoden (Hinzugefügt in Ingwer-Brot, auch wenn keine vollwertige), so gab es einen riesigen Nachteil-derzeit können Sie es verwenden, sorry für die nicht Aktualisierung auf, die von bens Antwort (google jit-dev) ref stackoverflow.com/a/4930538/1254628
- Der Artikel scheint zu sagen, dass Sie sollten Sie verwenden für den privaten Bereich-Zugang nur: "Es ist sinnvoll, die Folgen der common object-oriented programming practices und haben Getter und setter in der öffentlichen Schnittstelle, aber innerhalb einer Klasse sollten Sie immer Zugriff auf Felder direkt."
- der Artikel ist veraltet inlining hinzugekommen-aber noch war es nicht nur für Klasse sondern auch für Objekte, die zu(aber nur Schnittstellen) der Grund dafür war die jit-comp war nicht, dass vollwertige inline-jene codes und war wirklich teuer für ein handheld-Gerät perfomance !! jetzt inlining verfügbar ist, können Sie Getter und setter!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen, die variable private ist, denn dadurch werden Sie encapsulating die Variablen in Ihrer Klasse. Das hat viele Vorteile, Informationen ausblenden gehört, das erfahren Sie, wenn Sie gehen, um den oben genannten link.
Wenn Sie wollen, dass es sich nie ändern nach dem anlegen, dann machen Sie es endgültig zu.
Das funktioniert jetzt, weil ein
String
unveränderlich ist. Aber was passiert, wenn Sie setzen die Referenz auf ein veränderliches Klasse und diese Klasse ist nicht thread-safe ?. Sie kann sogar wieder ein defensive kopieren wenn Sie wollen.Nicht zu erwähnen, das bricht auch Kapselung. Verwenden Sie eine private variable und Getter.
Die Idee, nicht die Bereitstellung einer setter-Methode einer Variablen macht es ein nur-Lesen-Feld, das heißt, es bedeutet, können wir nur Lesen, aber nicht schreiben, so dass es eine Konstante, die durch die Nutzung der
final
Stichwort fasst es alle.Ich glaube eine Konstante ist besser.
final
keyword verbessert die Leistung. Lesen Sie mehr hierSollten Sie auf jeden Fall eine getter-und machen Sie Ihren privaten Bereich. Das ist das, was wir nennen Kapselung.
Auch, indem es final und so nicht mit einem setter, der Ihr Objekt ist unveränderlich, die NIC ist eine sehr gute Sache für die parallele Programmierung.
Eine ordnungsgemäße Verwendung von encapsulation-Prinzip ist es, alle Klassen-Felder private und Zugriff über setter und Getter. Andere als die, möchten Sie vielleicht, um zusätzliche Logik, wenn Sie anrufen
getName()
. Während die zweite Variante wird manchmal verwendet wird, der erste ist besser. Hoffe, das hilft.Wenn Sie erfolgreich sein wollen, Entwickler, sollten Sie das Programm korrekt und effizient die wichtigsten sicher. Sicherheit und performance ist auf dem ersten Platz.
Wenn Sie der öffentlichkeit bekannt machen Sie Pause Kapselung, dass ist sehr wichtig und hat viele Vorteile. Jedes mal, wenn Sie wollen zu bekommen-Eigenschaft des Objekts, Getter wird zu deinem Freund.
In der Regel sollten Sie keinen direkten Zugriff auf die Eigenschaften des Objekt(nur in extrem Fällen aber auch diese können gelöst werden in besser Weise). Getter und Setter sind für diese Zwecke bezeichnet - erhalten Kapselung und beschäftigen sich mit Objekten sicher.
final variables
sind in der Regel für Daten verwendet, die unveränderlich sind, während einer Zeit.Ich denke, Ihre Argumentation ist, dass es
public
hält den code einfacher. Java wird kritisiert, weil Sie zu ausführlich in Situationen wie dieser. Über eine Sprache wie Javascript, wo dieser (normalerweise) immerpublic
.Aber diese Einfachheit ist ein trade-off gegen die sichere, stabile und erweiterbare code.
Sehen, warum das wichtig ist, nehmen Sie einen Blick an einer so großen Javascript-Projekt, das geschrieben wurde, mit allem, was öffentliche. Jede Klasse den code kann ganz einfach... aber Ihre Beziehungen und den daraus resultierenden Architektur, am Ende wird ein Alptraum zu verwalten.
Ich denke, es hängt davon ab. Zum Beispiel: wenn Sie verwenden Sie die get - können Sie überschreiben. Manchmal ist es sehr nützlich.