• ベストアンサー

java.util.ArrayListクラスの継承

Java5年ぶりでちょっと新しい仕様について教えてください。。 java.util.ArrayListクラスを継承したクラスを作成しようと思っているのですが、継承後のクラスでも ArrayListChild<E> というような記述を有効にするには、一体どのような処理をすればよいのでしょうか。 そもそも、<E>とコンストラクタの後などに付けるこの仕様、なんて名前の仕様なんでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • meenie
  • ベストアンサー率44% (40/90)
回答No.1

className<E>という仕様は、genericsType(総称型)と呼ばれています。 genericを利用したクラスの定義は以下の例をご覧ください。 public class ArrayListChild<E> extends ArrayList<Object> {   private E arg;   public E getArg(); // 定義省略   public void setArg(E arg); // 定義省略   public E doSomething(); // 定義省略 } 【注意点】 基底クラスのgeneric typeがObjectではない場合、 派生クラスのgeneric type指定の際に、注意が必要です。 (例) java.io.Writerとその派生クラスのみを許すArrayListを拡張する場合 public class ArrayListChild<T extends java.io.Writer> extends ArrayList<java.io.Writer> extends java.io.Writerを記述していなくてもコンパイルは通ります。 しかし、Writer派生クラスしか取れないはずなのに new ArrayListChild<String>() などが コンパイルエラーにならないという、あまりよろしくない状況になります。

関連するQ&A