加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

具有多个参数的Java泛型

发布时间:2020-12-15 03:15:39 所属栏目:Java 来源:网络整理
导读:我在网站上看到过处理具有多个参数的泛型的示例,但没有一个适用于我的情况. 所以这是交易:我正在尝试学习Java泛型,并决定创建一个简单的二进制数组搜索实用程序函数.我正在使用自定义对象和整数进行测试.要获得有关错误和警告的反馈,我正在使用Eclipse.这是
我在网站上看到过处理具有多个参数的泛型的示例,但没有一个适用于我的情况.

所以这是交易:我正在尝试学习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,start,mid - 1);
    } else {
        return mid;
    }
}

所以很明显我得到Raw类型的警告,说泛型应该参数化.如果我有多个参数需要是同一类型,我怎么能正确地做到这一点?

以下是使用泛型和正确参数检查的工作解决方案:

public static <T extends Comparable<? super T>> int binarySearch(T[] array,T item,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,mid - 1);
    } else {
        return mid;
    }
}

解决方法

你可以像这样指定特定于函数的泛型参数
public static <T extends Comparable<? super T>> int binarySearch(T[] arr,T elem,int end){
    //...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读