列挙型をいくつも作成して、そこに似たようなメソッドを定義していると、「列挙型も継承できたらいいのに」と思ってしまう。が、残念ながら、列挙型は継承ができない。それも当然で、abstract な列挙型なんてありえない。仕方ないなあ。
ただ、インタフェースの実装はできるので、これを活用するのが正解。
public interface Foo {
public int getNumber();
}
というインタフェースを定義しておいて、
public enum FooEnum implements Foo {
ONE (1),
TWO (2),
THREE (3);
private int number;
private FooEnum (int arg0) {
this.number = arg0;
}
/* (non-Javadoc)
* @see Foo#getNumber()
*/
@Override
public int getNumber() {
return number;
}
}
という感じで、列挙型を定義してあげる。
public class Sample {
public static void main(String[] args) {
for (Foo foo : FooEnum.values()) {
System.out.println(foo.getNumber());
}
}
}
実際にこんな感じでインタフェースプログラミングができる。
Foo インタフェースを実装した列挙型を量産する際に、いちいちコンストラクタとフィールドを用意するのが、非常にかったるいわけだけど、その列挙型ではそこを意識しなくて良くなるから、それがせめてもの救い。
ちなみに、列挙型って1.xあたりでの java 育ちな人には、あんまり積極活用されていないような気がする。文化として根付かないのかな。スゴイ便利なんだけどなあ。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/469
