Javaで定数をまとめて管理する方法
プロパティ以外で知っているのだと3種類。どれで実装するべきか?の話
- 定数インタフェース
- 定数クラス
- enumクラス
enumを使ってください。インタフェースで定義しているのは聞いたことはあるけど見たことは無い。
定数インタフェースを実装した例(Effective Java第2版項目19から引用)
public interface PhysicalConstants {
// アボガドロ定数(1/mol)
static final double AVOGADROS_NUMBER = 6.02214199e23;
// ボルツマン定数(J/K)
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
// 電子の質量(kg)
static final double ELECTRON_MASS = 9.10938188e-31;
}
- implementして利用する。
見たことはない。。定数インタフェース増えたら必要な分implementするということ?
名前がかぶりそう。。結合度高い。インタフェースの使い方じゃない。
定数クラスを実装した例
public final class Constants {
public static final String PATH_SEP = "/";
public static final String LINE_SEP = "¥n";
private Constants (){}
}
- finalにして継承不可。
- privateコンストラクタでインスタンス不可。
最初に作る人がクラス名をConstantsとかにしてしまうと肥大化する。
大体そうなってる。
enum クラスでを実装した例
public enum ExamEnum {
SUNDAY(0),
MONDAY(1),
TUESDAY(3),
WEDNESDAY(4),
THURSDAY(5),
FRIDAY(6),
SATURDAY(7);
}
- シングルトン強制
- 型安全にできる
- enumクラスで用意されたメソッド使って色々
- 順番も保持
いつかどこかで「定数クラス(笑)」といわれて使い始めた。他に比べて実装するコード量以外のデメリットがないので使い続けている。コード量も一度書けばコピペで基本的なことはできるので。。
いい感じの使い方は調べれば沢山出てくるのでここでは書きません。