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によるチュートリアルを参照のこと