- ベストアンサー
java.util.ArrayListクラスの継承
Java5年ぶりでちょっと新しい仕様について教えてください。。 java.util.ArrayListクラスを継承したクラスを作成しようと思っているのですが、継承後のクラスでも ArrayListChild<E> というような記述を有効にするには、一体どのような処理をすればよいのでしょうか。 そもそも、<E>とコンストラクタの後などに付けるこの仕様、なんて名前の仕様なんでしょうか。 よろしくお願いします。
- みんなの回答 (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>() などが コンパイルエラーにならないという、あまりよろしくない状況になります。