2017-12-03 10 views
1

検索しましたが、この特定のトピックをカバーする他のスレッドは見つかりませんでした。メソッドを使用して定数を宣言するのは悪いフォームですか?

public static final Path DIR = ROOT.resolve(NAME); 

これは悪い習慣と考えられる理由はありますか?

+0

何もない、それはフィールド値とフィールド値は、最初にそのコードに問題があってはならない初期化されますよう。しかし、多分あなたはそれのための静的初期化ブロックの使用を検討する必要があります。 – prsvr

+0

例:https://stackoverflow.com/a/2420405/544779 –

+0

です。あなたの答えをありがとう。これは、メソッドを使って割り当てられた静的な最終変数が適切なプラクティスであるかどうかを疑問に思う他の人を助けるでしょう。 –

答えて

3

主な問題は、この定数と、これまでどのようなROOTの種類があるが持つクラス間の緊密な結合です。

DIRがコンパイル時に知られていないものであれば、それはであるべきである(好ましくは、コンストラクタパラメータとして)クラスにを注入しprivate final(ただし static )部材に保持されています。あなたが何をしたか

+0

目的は、パスがこのパスにアクセスする他のクラスと同様にクラス全体で一様に使用されることを保証することです。もともと私はゲッターメソッドを持っていましたが、なぜ私は自分自身に尋ね始めました、そして、私はこれを思いつきました。それはうまくコンパイルされますが、ヌルを返す可能性のあるクラスでインスタンスを作成するのは間違っていると思います(可能性は低いですが)。あなたはおそらく正しいでしょう。コンストラクタはプライベートなので、コンストラクタや静的な初期化ブロックで初期化するので、他の方がおそらく意味をなさないでしょう。ありがとう:P –

1

は、グローバル変数の宣言です。悪い練習そのものです。むしろ私は、この変数をプライベートとして宣言し、そのディレクトリ(?)を操作する責任だけを与えられるクラスのコンストラクタで初期化することを提案します。ディレクトリパスの計算方法が変更される状況を考えてみましょう。この変数を使用する他のすべてのクラスに影響を与えます。したがって、悪影響を制限するほうがよいでしょう。特定

+0

はい、このクラスが担当するファイルは1つのディレクトリにのみ存在します。ルートはプログラムが実行された場所です。システムルートではなく、C:\ –

関連する問題