列挙型をいくつも作成して、そこに似たようなメソッドを定義していると、「列挙型も継承できたらいいのに」と思ってしまう。が、残念ながら、列挙型は継承ができない。それも当然で、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