【发布时间】:2012-05-06 22:58:18
【问题描述】:
我在网站上看到了处理具有多个参数的泛型的示例,但没有一个适合我的情况。
所以这里是交易:我正在尝试学习 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;
}
}
【问题讨论】:
-
只是告诉你,如果你传入一个零长度或空数组,这将失败。
-
是的,这是一个简单的例子——我对多个泛型的概念感兴趣,而不是二分搜索。不过还是谢谢。
标签: java generics comparable