Widziałem przykłady na stronie, które dotyczą generyków z wieloma parametrami, ale żaden nie działa w mojej sytuacji.Generic Java z wieloma parametrami
Oto, czym jest umowa: Próbuję nauczyć się generycznych Java i postanowiłem utworzyć prostą funkcję wyszukiwania tablicy binarnej. Testuję to za pomocą niestandardowych obiektów i liczb całkowitych. Aby uzyskać informację zwrotną na temat błędów i ostrzeżeń, używam Eclipse. Oto, co mam:
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;
}
}
Tak więc dostaję ostrzeżenia dla typów Raw, mówiąc, że generics powinny być sparametryzowane. Jak mogę to zrobić poprawnie, biorąc pod uwagę, że mam wiele parametrów, które muszą być tego samego typu?
ROZWIĄZANIE
Oto roztwór roboczy przy użyciu rodzajowych z poprawnymi kontroli parametrów:
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;
}
}
Wystarczy powiadomieniem, to nie uda, jeśli przechodzą w zerowej długości lub zerowej tablicy. –
Tak, to jest trywialny przykład - interesuje mnie pojęcie wielu leków generycznych, a nie binarnych. W każdym razie dzięki. – jjNford