【Java】enumの利用
今回はenumを使ってみます。
私も現場に出て初めて存在を知りました。
まずenumってなんだ?っていうところから。
enumとは一言で言うと列挙型です。
いや列挙型とか言われても・・・ってなりますよね。
簡単に言うと定数を列挙して用意しておけるということです。
使用例を見ていきます。
まずはenumから。
Human.java
public enum Human { TARO("太郎", 175, 65), HANAKO("花子", 155, 43); private String name; private int height; private int weight; private Human(String name, int height, int weight) { this.name = name; this.height = height; this.weight = weight; } private String getName() { return name; } private int getHeight() { return height; } private int getWeight() { return weight; } public static int getHeight(String name) { Human[] humans = Human.values(); for(Human human : humans) { if(human.getName().equals(name)) { return human.getHeight(); } } return 0; } public static int getWeight(String name) { Human[] humans = Human.values(); for(Human human : humans) { if(human.getName().equals(name)) { return human.getWeight(); } } return 0; } }
ちょっと長くなりましたがこんな感じです。
メソッドを追ってもらえれば何となくわかるかもしれません。
nameをキーにheigthとweighjtを取得できそうです。
enumにはprivateなフィールドとコンストラクタが必須です。
そしてコンストラクタは定義したフィールドに相当する引数を持つ必要があります。
その上でgetterを用意することでenumとして機能するようになります。
そして以下がenumを実際に使用したクラスです。
Study.java
public class Study { public static void main(String[] args) { String human1 = "太郎"; System.out.println(human1 + "の身長は" + Human.getHeight(human1) + "cm"); System.out.println(human1 + "の体重は" + Human.getWeight(human1) + "kg"); } }
実行結果
太郎の身長は175cm 太郎の体重は65kg
ちゃんと定数を表示できています。
もちろん引数に渡しているhuman1が花子であれば、花子の身長や体重の値を取得します。
今回のような、Stringをキーにintを取得するような場合はマッチしなかった場合0を返していますが、それが正しいのかはわかりません。
例えばintをキーにStringを持ってくる場合はnullを返せばいいと思うんですけど。
Integerにして同じようにnullを返せば良いんですかね。
あとはenumはこういう記述もできるみたいです。
Human.java
import java.util.HashMap; import java.util.Map; public enum Human { TARO("太郎", 175, 65), HANAKO("花子", 155, 43); private String name; private int height; private int weight; private Human(String name, int height, int weight) { this.name = name; this.height = height; this.weight = weight; } private static final Map<String, Integer> heightMap = new HashMap<String, Integer>(); private static final Map<String, Integer> weightMap = new HashMap<String, Integer>(); static { for(Human entry : Human.values()) { heightMap.put(entry.getName(), entry.getHeight()); weightMap.put(entry.getName(), entry.getWeight()); } } private String getName() { return name; } private int getHeight() { return height; } private int getWeight() { return weight; } public static int getHeight(String name) { return heightMap.get(name); } public static int getWeight(String name) { return weightMap.get(name); } }
先ほどのenumと比べてMapの定数を定義し、そのMapに対してキーから値を取得しています。
コードだけで見ればこちらの方がすっきりしていますね。
今回は以上になります。