JavaのEnum型のクラスにはコンストラクタを定義することができるみたいです。
Enum型の列挙子はEnumを使用するタイミングでJVMが自動であまねくインスタンス化するらしいです。
また、JavaのEnumはほかの言語のEnumとちがってクラスとして定義されていて、Objectを継承、Serializable、Comparableを実現しているため、toString()やhashCode()、compareTo()などのメソッドが用意されています。
それを踏まえたうえで、以下のコードは次のような結果になります。
EnumSample.java
public enum EnumSample{
Gold("Gold!"),Silver("Silver!"),Bronze("Bronze!");
private String value;
private EnumSample(String value){
this.value = value;
System.out.println(this.value);
}
@Override
private String toString(){
return this.value;
}
}
Main.java
public Main{
public static void main(String[] args){
System.out.println(EnumSample.Gold);
}
}
実行結果
Gold!
Silver!
Bronze!
Gold!
なお、EnumクラスのコンストラクタはEnum型の性質上privateにすることが義務づけられています。
そのため、privateを省略した場合は、暗黙的にprivateになります。
もしかしたらどこかで使うかもしれない?のでメモしました。
間違っている箇所があれば教えてください。