dT*blog

design and programming

列挙型は継承ができない

列挙型をいくつも作成して、そこに似たようなメソッドを定義していると、「列挙型も継承できたらいいのに」と思ってしまう。が、残念ながら、列挙型は継承ができない。それも当然で、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 育ちな人には、あんまり積極活用されていないような気がする。文化として根付かないのかな。スゴイ便利なんだけどなあ。

Posted by dT by 00:47

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/469

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30