Я видел на сайте примеры, которые имеют дело с дженериками с несколькими параметрами, но ни один из них не подходит для моей ситуации.
Итак, вот в чем дело :Я пытаюсь изучить дженерики 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;
}
}
Итак, очевидно, я получаю предупреждения для необработанных типов о том, что дженерики должны быть параметризованы. Как я могу сделать это правильно, учитывая, что у меня есть несколько параметров, которые должны быть одного типа?
РЕШЕНИЕ
Вот рабочее решение с использованием дженериков с правильными проверками параметров:
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;
}
}