15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javaの定数定義

Last updated at Posted at 2018-11-01

Javaで定数をまとめて管理する方法
プロパティ以外で知っているのだと3種類。どれで実装するべきか?の話

  1. 定数インタフェース
  2. 定数クラス
  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クラスで用意されたメソッド使って色々
  • 順番も保持

いつかどこかで「定数クラス(笑)」といわれて使い始めた。他に比べて実装するコード量以外のデメリットがないので使い続けている。コード量も一度書けばコピペで基本的なことはできるので。。
いい感じの使い方は調べれば沢山出てくるのでここでは書きません。

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?