これにはいくつかの困難がありましたが、できるだけ簡単に共有するいくつかのことを考え出しました.
ジェネリックに関する私の経験はコレクションに限られているため、次のようなクラス定義でそれらを使用します。
public class CircularArray<E> {
データメンバーが含まれています:
private E[] data;
ただし、ジェネリック型の配列を作成することはできないため、次のメソッドがあります。
@SuppressWarnings("unchecked")
private E[] newArray(int size)
{
return (E[]) new Object[size]; //Create an array of Objects then cast it as E[]
}
コンストラクターで:
data = newArray(INITIAL_CAPACITY); //Done for reusability
これは一般的なジェネリックに対しては機能しますが、ソートできるリスト、つまり Comparables のリストが必要でした。
public class SortedCircularArray<E extends Comparable<E>> {
//any E that implements Comparable or extends a Comparable class
データメンバーが含まれています:
private E[] data;
しかし、新しいクラスは java.lang.ClassCastException をスローします。
@SuppressWarnings("unchecked")
private E[] newArray(int size)
{
//Old: return (E[]) new Object[size]; //Create an array of Objects then cast it as E[]
return (E[]) new Comparable[size]; //A comparable is an object, but the converse may not be
}
コンストラクターでは、すべて同じです。
data = newArray(INITIAL_CAPACITY); //Done for reusability
これがお役に立てば幸いです。間違いを犯した場合は、経験豊富なユーザーが修正してくれることを願っています。