2016-07-29 14 views
1

Ich verstehe, dass System.setProperty(“key”,”value”) und System.getProperty(“key”) zum Speichern und Abrufen von Systemeigenschaften und benutzerdefinierten Eigenschaften verwendet werden. Auf die eingestellten Werte kann überall in der Anwendung zugegriffen werden.System.setProperty oder öffentliche statische Variable?

Auch ist mir bewusst, dass wenn eine Variable public und static deklariert wird, wird es zu einer Konstante und ist überall in der Anwendung verfügbar.

Ich möchte von der 2 wissen, die vorteilhaft und eine bessere Option ist. Ein Aspekt, den ich mir vorstellen kann, ist System.setProperty ist nützlich, wenn wir einen Wert in einer XML-Datei [mit $ {key}] abrufen wollen. Das Gleiche kann nicht mit öffentlichen statischen Variablen erreicht werden.

Meine Fragen sind

  1. Gibt es noch andere Vorteile?
  2. Welches ist eine bessere Option?
  3. Auf welchen Szenarien sollte man mit System.setProperty/getProperty und öffentlichen statischen Variablen gehen?

Vielen Dank im Voraus.

+1

Scheint breit, aber IMHO ** nicht ** verwenden Sie 'System.getProperty' auf diese Weise: Wie Sie gesagt haben, können Sie eine Constants-Klasse mit' öffentlichen statischen final'-Variablen erstellen. Sie können auch eine Eigenschaftendatei und 'Map' in ein Objekt mit Schlüsselwert definieren .... –

+0

Danke für Ihre Antwort, ich stimme vollkommen zu, dass wir eine ** Eigenschaften ** Datei oder ** Karte ** [_In tatsächlich verwenden können So habe ich all diese Jahre gemacht. Aber ich sehe keinen konkreten Grund, warum man nicht stattdessen ** System.getProperty ** verwenden sollte. Bitte vorschlagen. Vielen Dank. – Andy

+1

können Sie, aber das ist ein Missverständnis von System.getProperty. Es ** sollte ** verwendet werden, um die Eigenschaften des Systems zu speichern. –

Antwort

0

Ein Setter kann weitere Tests haben. Wie Tests gegen null, Test gegen schlechte Werte etc ...

Ein Setter ist in der Regel eine bessere Option, noch eine Klasse ohne Setters könnte noch besser sein, geben Sie nicht die Benutzer Möglichkeiten des Programms

zerstören
public static Variable variable; 

//In other file 
variable = null; 

und öffentliche statische Variablen sind nicht Thread-sicher überhaupt !!! (Vielleicht, wenn es Atom ist)

es sei denn, etwas zu tun wirklich verändert ich viel sein wollen, wie ein Vector2D/3D ich nie öffentlich verwenden statisch (und in diesem Fall ist es sowieso nicht statisch, weil es nicht statisch ist). Um das hinzuzufügen, mache ich es nur, weil der Benutzer x, y, z nicht aufheben kann, weil es ein float/int ist. Normalerweise gehe ich mit Methoden, die tun, was ich will und nicht einfache Setter.

(Ex: Kein gutes Beispiel, aber ich denke, es zeigt, was bedeutete, dass ich statt Person.setState (State.EATING) mit Person.eat().)

0

Wenn Sie ein Java-Programm ausführen, Sie sind Starten einer JVM-Instanz. Diese Instanz hat ihre eigenen Systemeigenschaften. Dort können Sie Ihre Eigenschaften ablegen. Wenn Sie ein anderes Programm ausführen, hat es eigene Systemeigenschaften.

Ein Eigenschaften-Objekt ist ein Untertyp von Hash-Tabelle und es ist auch Thread-sicher. Wenn Sie jedoch eine öffentliche statische Variable verwenden möchten, müssen Sie auch den synchronen Zugriff in Multithread-Programmen handhaben.

+0

Danke für Ihre Antwort.Ich verstehe Ihren Standpunkt, aber meine Frage ist, ist es eine ** gute Praxis **, System.setProperty/getProperty zu verwenden, um Schlüssel-Wert-Paare ** ** _ anstatt _ ** zu speichern ** und ** abzurufen Map oder Properties, die als _public_ und _static_ deklariert sind. – Andy

Verwandte Themen