Java
enum

Javaのenum書式テンプレート集

More than 1 year has passed since last update.

Javaにおけるenumの書き方を忘れがちなので、パターン別に書式をメモしておく(Javadocコメントは省略)。
パターンは、以下の要素の組み合わせで決まる。

  • クラスの種類
    • トップレベルクラス
    • 内部クラス
  • アクセスレベル
    • パッケージプライベート
    • public
    • protected
    • private
  • フィールドの取得方法
    • public finalフィールドパターン
    • getterパターン
    • public finalフィールド+getterパターン

オススメのフィールドの取得方法は、public finalフィールド+getterパターンである(enumのフィールドは不変なのでgetterを使用しなくてもいいが、getterもメソッド参照などで有用であるため)。

トップレベルクラス

トップレベルクラスに指定可能な修飾子はpublicのみ。
通常のクラス同様、アクセス修飾子を省略するとパッケージプライベートとなる。
enumの場合はパッケージを分けていると思うので、通常はpublicにすべきだろう。

パッケージプライベート

public finalフィールドパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public

public finalフィールドパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

内部クラス

内部クラスに指定可能な修飾子はpublicprotectedprivatestaticのみだが、staticは省略可能(省略した場合は暗黙的にstaticとなる)。
アクセスレベルは、通常のクラスと同様に適切なものを選択すればいいだろう。

パッケージプライベート

public finalフィールドパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public

public finalフィールドパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

public enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

protected

public finalフィールドパターン

protected enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

protected enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

protected enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

private

public finalフィールドパターン

private enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }
}

getterパターン

private enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    private final String two;
    private final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

public finalフィールド+getterパターン

private enum LanguageCode{
    ENGLISH("en", "eng"),
    JAPANESE("ja", "jpn");

    public final String two;
    public final String three;

    LanguageCode(String two, String three){
        this.two = two;
        this.three = three;
    }

    public String two(){
        return two;
    }

    public String three(){
        return three;
    }
}

参考リンク