0

プロパティ ファイルのすべての構成を含むクラスがあります。

私の最初の解決策はこれです:

public class Config {

    public static final int disc;

    static {

        // Read property file and set properties

        disc = 5;
    }
}

この方法で情報を読む:

System.out.println(Config.disc);

2番目の解決策は次のとおりです。

public class Config {

    private int disc;

    public void Config() {

        // Read property file and set properties

        disc = 5;
    }

    public int getDisc() {
        return this.disc;
    }
}

そのように読む:

System.out.println(new Config().getDisc());

最善の方法とその理由は何ですか? メリットとデメリットは?

4

5 に答える 5

2

答えは、 の意味によって異なりますdisc

  • disc定数を表し、基本的に数値に名前を付ける場合は、パブリック最終フィールドよりも優れています
  • ユーザーのアクションの結果として変更される可能性のある値を表す場合disc(つまり、構成の一部である場合)、getter を持つプライベート変数が推奨されます。

2 番目のアプローチは、将来クラスをリファクタリングすることを決定した場合に、柔軟性を高めます。disc後でプライベートを初期化するか、値を取得する別の方法 (たとえば、他の値から計算するなど) に置き換えることができます。または別のオブジェクトから読み取ります。

于 2013-09-04T10:00:23.513 に答える
1

どうでしょうか:public static final int DISC = 5; 次に、 を使用Config.DISCして設定値にアクセスできます。

于 2013-09-04T09:56:48.540 に答える
1
System.out.println(Config.getDisc());

これは間違っています。クラス名で非静的メソッドを呼び出すことはできません。次のようにオブジェクトを作成する必要があります。

Config cfg = new Config();
System.out.println(cfg.getDisc());

さて、最初のケースでは、すべてのインスタンスが の同じコピーを共有しますdisc。したがって、定数でない場合は、2 番目のケースに進みます。

于 2013-09-04T09:56:49.410 に答える
0

この場合、あなたが本当に欲しいのは

public static final int DISC = 5;

System.out.println(Config.DISC);

(これらのようなメンバーは、慣習的に常に大文字で書かれていることに注意してください)。


最初のソリューションにはエラーがあります。最終フィールドを複数回設定しようとするため、コンパイルされません。を作成するたびnew Config()に に値を割り当てますdiscが、それは最終的なものであるため機能しません。あなたがおそらく提案したかったのは、それを静的コンストラクターに入れることでした:

public class Config
{
    public static final int DISC;
    static
    {
        DISC = 5;
    }
}

ただし、最初に書いた方法よりもはるかに簡単であり、はるかに簡単であるため、お勧めしません。

2番目のソリューションにはエラーがあります。静的コンテキストから非静的メソッドにアクセスできないため、コンパイルされません。これは、メソッドを呼び出す前に、最初に Config のインスタンスを作成する必要があることを意味しますgetDisc()。この場合のより良い解決策は、メソッドを静的として宣言することです。

于 2013-09-04T10:05:11.780 に答える