J2SE5のGenericsとインスタンス生成に関するメモ
J2SE5でGenericsなクラスを作ろうとして若干はまった。何かの役に立つかもしれないのでメモしておこう。
public class GenericArray<T extends Comparable<? super T>> {
private Comparable<? super T>[] records;
public GenericArray(int max) {
records = (Comparable<? super T>[]) new Comparable[max];
}
}
言語仕様上、new T[]
としてGenericsな型のインスタンスを生成することは出来ないので、コード上ではあらかじめ既知の型で生成し、欲しい型にキャストすることになる。このとき、Object[]
からではなく、Comparable[]
からキャストしないとエラーになるようだ。また、<? super T>もつけるべきらしい。
細かいことはSunによるチュートリアルを参照のこと