はじめに
今まで enum はただ定数を保管しておくためのクラスだと思っていたが、業務の中で自分が知らなかった方法で enum を使用していたし、便利だなと思ったのでメモとして残す。
Java Silver の試験には出てこなかった。
enum class
(1) enum でもコンストラクタの定義ができる。
・ ここでは引数で受け取った名前と血液型を決定
(2) メソッド getPesonInfo
で PesonInfo
を初期化して返す。
・ この enum クラスにセットされた名前と血液型を使用して初期化したPesonInfo
を返す。
package enumTest;
public enum Persons {
// (3)
TARO("田中太郎","AB型"),
YUKA("佐々木優花", "O型");
// (1)
Persons(String name, String bloodType){
this.name = name;
this.bloodType = bloodType;
}
private String name;
private String bloodType;
// (2)
public PersonInfo getPesonInfo(){
return new PersonInfo(this.name, this.bloodType);
}
}
PersonInfo class
名前と血液型をフィールドに、コンストラクタを持つ普通のクラス
package enumTest;
public class PersonInfo {
private String name;
private String bloodType;
PersonInfo(String name, String bloodType){
this.name = name;
this.bloodType = bloodType;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setBloodType(String bloodType){
this.bloodType = bloodType;
}
public String getBloodType(){
return this.bloodType;
}
}
使用例
(3) Persons.TARO
で enum class を初期化
(4) メソッドチェーンで getPesonInfo
呼び出し。
enum class に定義してある getPesonInfo
の返却値の型は PersonInfo
。返却されるときには既に名前と血液型はセットされている。
・ taroInfo
には (3) で 初期化した際にセットした名前と血液型が格納
package enumTest;
public class Main {
public static void main(String[] args) {
// (4)
PersonInfo taroInfo = Persons.TARO.getPesonInfo();
System.out.println(taroInfo.getName());
System.out.println(taroInfo.getBloodType());
System.out.println("----------------------");
PersonInfo yukaInfo = Persons.YUKA.getPesonInfo();
System.out.println(yukaInfo.getName());
System.out.println(yukaInfo.getBloodType());
}
}
出力結果
田中太郎
AB型
----------------------
佐々木優花
O型
終わりに
既にいい記事が出ていた。。。
https://qiita.com/igm50/items/8c9788d4ba5868642c69