複数のパラメーターを持つジェネリックを扱う例をサイトで見ましたが、私の状況ではうまくいきません。
これが取引です。私はJavaジェネリックを学ぼうとしていて、単純なバイナリ配列検索ユーティリティ関数を作成することにしました。カスタムオブジェクトと整数を使用してテストしています。エラーと警告に関するフィードバックを得るために、私はEclipseを使用しています。これが私が持っているものです:
public static int binarySearch(Comparable[] array, Comparable item, int start, int end) {
if(end < start) {
return -1;
}
int mid = (start + end) / 2;
if(item.compareTo(array[mid]) > 0) {
return binarySearch(array, item, mid + 1, end);
} else if(item.compareTo(array[mid]) < 0) {
return binarySearch(array, item, start, mid - 1);
} else {
return mid;
}
}
したがって、明らかに、ジェネリックをパラメーター化する必要があるというRawタイプの警告が表示されます。同じタイプである必要がある複数のパラメーターがある場合、これを正しく行うにはどうすればよいですか?
解決
ジェネリックスと正しいパラメータチェックを使用した実用的なソリューションは次のとおりです。
public static <T extends Comparable<? super T>> int binarySearch(T[] array, T item, int start, int end) {
if(array.length == 0) {
return -1;
}
if(item == null) {
return -1;
}
if(start < 0) {
return -1;
}
if(end < start) {
return -1;
}
int mid = (start + end) / 2;
if(item.compareTo(array[mid]) > 0) {
return binarySearch(array, item, mid + 1, end);
} else if(item.compareTo(array[mid]) < 0) {
return binarySearch(array, item, start, mid - 1);
} else {
return mid;
}
}