enumは便利ですよね。
 でも、一緒に数値とか文字列とか持っておきたいことないですか?
 こんなときはこちらw
enumに数値や文字列など色々な値を格納しておくサンプル
enumに音階の周波数をdouble、ふつーのドレミをStringで一緒に格納してみました。
 ここから1つ取り出し。追加した情報を取り出してみます。
 また、enumに作ったメソッドで1オクターブ高い周波数を計算してもらいます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | public class EnumTest {     public static void main(String[] args) {         //enumから各種取り出し         String name = Scale.A4.name();         double frequency = Scale.A4.frequency();         String scaleName = Scale.A4.scaleName();         System.out.println(name + " " + frequency + " " + scaleName);         System.out.println("1オクターブ上の周波数:" + Scale.A4.octaveFrequency());     } } enum Scale {     //括弧内は、音階の周波数、ふつーのドレミ     A4(440.0,"ラ4"),     B4(493.9,"シ4"),     C5(523.3,"ド5"),     D5(587.3,"レ5"),     E5(659.3,"ミ5"),     F5(698.5,"ファ5"),     G5(784.0,"ソ5"),     A5(880.0,"ラ5");     //括弧内のデータ型を宣言     private final double frequency;     private final String scaleName;     //コンストラクタ     Scale(double frequency, String scaleName) {         this.frequency = frequency;         this.scaleName = scaleName;     }     //アクセサ     public double frequency() { return frequency; }     public String scaleName()   { return scaleName; }     //おまけのメソッド(1オクターブ上の周波数を返す)     public double octaveFrequency() {         return this.frequency * 2.0 ;     } } | 
実行結果
enumに音階の周波数をdouble、ふつーのドレミをStringで一緒に格納してみました。
 ここから1つ取り出し。追加した情報を取り出してみます。
 また、enumに作ったメソッドで1オクターブ高い周波数を計算してもらいます。
| 1 2 | A4 440.0 ラ4 1オクターブ上の周波数:880.0 | 
サンプルの解説
enumの中にある定数の横に括弧でくくって、追加の情報を書くことができます。
 ただ、このままでは使えないので、列挙した定数の下に括弧内のデータ型とコンストラクタを書きます。
 ここまではお決まりのパターンですw
 ついでに、1つおまけのメソッドを作りました。こんな感じで簡単なことはenumの中でできちゃいますね。
余談ですが、音階の周波数はこんなふうに計算できますw
 なので、そもそも持っておく必要はないわけですが。。ねたってことで。
440Hz(基準ラ/A4) * 2^(n/12)
 ※n=基準ラから半音ずらした数(ピアノの鍵盤でいえば、黒鍵と白鍵含めて右or左にずらす)














