パンくず
Effective Java
拡張可能なenumをインターフェースで模倣する
概要
拡張可能なenumをインターフェースで模倣する
詳細
Enumは継承できないが、インターフェースによる模倣が可能。
実装が重複する場合はヘルパークラスなど外部化することで重複を解消する。
サンプルコード
package effective.creation.chapter6; import gr.java_conf.tb.tbpg_util.lang.StringUtil; import java.util.Arrays; import java.util.List; public class SampleNo34 { private enum Hoge implements HasName { HOGE("hoge"), HIGE("hige"), HAGE("hage"); private String name; Hoge(String name) { this.name = name; } @Override public String getCapitalizeName() { return StringUtil.getCapitalize(this.name); } } private enum Hoo implements HasName { HOO("hoo"), HII("hii"), HAA("haa"); private String name; Hoo(String name) { this.name = name; } @Override public String getCapitalizeName() { return StringUtil.getCapitalize(this.name); } } private interface HasName { String getCapitalizeName(); } public static void main(String[] args) { printNames(Arrays.asList(Hoge.values())); printNames(Arrays.asList(Hoo.values())); } private static void printNames(List<? extends HasName> hasNames) { for (HasName hasName : hasNames) { System.out.println(hasName.getCapitalizeName()); } } }
出力
Hoge Hige Hage Hoo Hii Haa