は、我々は静的な初期化ブロックを使用します。スタティック初期化は良いプログラミングですか? Javaでは
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
を私は
- が、それは良いプログラミング習慣であることの不思議でしたか?
- このパターンはどこで使用しますか?
ありがとうございます。
は、我々は静的な初期化ブロックを使用します。スタティック初期化は良いプログラミングですか? Javaでは
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
を私は
ありがとうございます。
ある程度、それは味の問題です。
静力学であることを確認し、フィールドの最終を保つ書き込みをする傾向がある。私にはそれがいる限り大丈夫です良いテストが難しい。静的状態の修正を開始したい場合は、おそらく設計をもう一度見直す必要があります。
Google Guiceとその非常に良いSingleton implementationを見てみることを検討してください。
もちろん、アプリケーションが10行の単一クラスの実験であれば、これは全体としてはるかに重要です。あなたの例では、あなたが単純化でき
注:
private static final ApiKey API_KEY = new ApiKey();
しかし常に可能ではありません。おそらくより複雑な初期化コードを省略したでしょうか?この場合Guiceはもう一度見る価値があるでしょう。
あなたは以下のコードを使用して、完全に静的初期化子ブロックを使用して避けることができ:
private static final ApiKey API_KEY = new ApiKey();
または
private static final ApiKey API_KEY = createNewApiKey();
APIキーの作成だけでコンストラクタ呼び出しよりも多く必要とする場合
。それはコードをより読みやすくします。しかしそれはあまり重要ではありません。static {
// compute some values
A = somePartOfTheComputedValues();
B = someOtherPartOfTheComputedValues();
}
それでも、A及びBは、おそらく1つのオブジェクトにリファクタリングすることができ、単一で作成される2つの静的フィールドが同一の初期化コードに依存する場合
静的初期化が有用です方法。
可能な限り、私は列挙型を使いたいです。
代わりの
class ApiKey {
private static final ApiKey API_KEY;
static {
API_KEY = new ApiKey();
}
私は
enum ApiKey {
INSTANCE;
を書くでしょう、あなたの質問に対する「黒または白の」答えはありませんので、私はコメントします。個人的には、静的アクセサはプログラマの親友ではありません。Dependency Injectionは、テストに関しては多くの面で役立つ非常に良い選択肢です。 –
スタティックブロックで新しいスレッドが開始されるコードを見てきました。 :)それは非常に悪かった。 –