2016-07-29 6 views
1

System.setProperty(“key”,”value”)System.getProperty(“key”)は、システムプロパティとユーザー定義プロパティを保持し、取得するために使用されることを理解しています。設定された値は、アプリケーション内のどこにでもアクセスできます。System.setPropertyまたはpublic static変数?

また、私は変数がpublicstaticと宣言されたとき定数になり、アプリケーション内のどこでも利用可能であることを認識しています。

私は有利でより良いオプションである2を知りたいと思います。私が考えることができる1つの側面はSystem.setPropertyがxmlファイル[$ {key}を使用して]の値を取得したいときに便利です。パブリック静的変数を使用して同じことを達成することはできません。

私の質問は

  1. ある任意の他の利点はありますか?
  2. どれが良い選択肢ですか?
  3. System.setProperty/getPropertyとpublic static変数を使用するシナリオについて教えてください。

ありがとうございます。

+1

IMHO **はこのように 'System.getProperty'を使わない** あなたが言ったように、' public static final'変数を使ってConstantsクラスを作ることができます。また、プロパティーファイルとキー値を持つオブジェクトに 'Map'を定義することもできます.... –

+0

あなたの返信ありがとうございます。私は**プロパティファイル**または**マップ**を使用することができます、それは私がこれらすべての年を何とかしてきたことです。しかし、** System.getProperty **を代わりに使うべきではない具体的な理由はありません。提案してください。ありがとう。 – Andy

+1

できますが、これはSystem.getPropertyの誤解です。 **システムのプロパティを格納するために使用する必要があります**。 –

答えて

0

セッターは、さらにテストを行うことができます。ヌルに対する検査、不正な値などに対するテスト...同様

Aセッターは、セッターのないクラスは、より良いかもしれないあなたのプログラムを破壊するのユーザーの方法を与えていない、通常より良い選択肢である、まだ

私は本当に多くのことを変更することにしたい何かを扱っていない限り
public static Variable variable; 

//In other file 
variable = null; 

、公共の静的変数は!!!すべてのスレッドセーフではありません(それはアトミックですたぶん場合)

、Vector2D/3Dのように私は、公開使用することはありません静的です(この場合は静的ではないため、パブリック静的ではありません)。これを追加するには、浮動小数点型のためx、y、zをヌルにすることができないからです。通常、私は単純なセッターではなく、私が望むやり方でやります。

(例:ない良い例が、私はそれは私が何を意味するのかを示して考える代わりにPerson.setState(State.EATING)のPerson.eat()を使用。)

0

には、Javaプログラムを実行すると、あなたがしています実際にJVMインスタンスを開始します。そのインスタンスはそれ自身のSystemプロパティを持ちます。そこにあなたの物件を置くことができます。別のプログラムを実行すると、それ自身のシステムプロパティがあります。

プロパティオブジェクトは、ハッシュテーブルのサブタイプであり、スレッドセーフでもあります。しかし、パブリック静的変数を使用する場合は、マルチスレッドプログラムで同期アクセスを処理する必要もあります。

+0

ご返信ありがとうございます。私はあなたのポイントを取得しますが、私の質問は、それは**良い練習**です** System.setProperty/getPropertyを使用して**保存**と**キーと値のペアを取得** ** _代わりに** Mapまたは_public_および_static_として宣言されたプロパティ。 – Andy

関連する問題