gpt4 book ai didi

Java:为什么使用泛型函数比将接口(interface)类型作为函数参数更好?

转载 作者:行者123 更新时间:2023-11-30 08:46:02 25 4
gpt4 key购买 nike

在下面的代码中,isSorted 方法导致我的静态代码分析器给我一条警告:

作为原始类型“java.lang.comparable”的成员对“compareTo(T)”的未检查调用

现在,我从other posts找到了解决方案是像在等效函数 isSortedG 中完成的那样生成函数。

但是,我不明白为什么第二种方法比第一种好。据我所知,由于 isSortedComparable[] 作为参数,这应该会导致对该函数的任何用法进行编译时检查,以确保输入数组确实是实现了 Comparable 的类型。

换句话说,静态检查器警告的“未经检查的调用”是什么?

public class SortChecker{
public boolean isSorted(Comparable[] arr){
if(arr.length == 1){
return true;
}
for(int i = 1; i < arr.length; ++i){
if(arr[i].compareTo(arr[i-1]) < 0){
return false;
}
}
return true;
}

public <T extends Comparable<? super T>> boolean isSortedG(T[] arr){
if(arr.length == 1){
return true;
}
for(int i = 1; i < arr.length; ++i){
if(arr[i].compareTo(arr[i-1]) < 0){
return false;
}
}
return true;
}
}

最佳答案

非泛型 Comparable “可以”与任何 Object 进行比较(根据它的 compareTo() 签名),但实际上,可能只有一小部分类型可以与它进行有意义的比较(给它其他类型会导致 compareTo() 抛出异常)。例如,您可以转换 IntegerComparable , 但这仍然不会让你将它与 String 进行比较.因此,Comparable[]是有风险的事情,因为你不知道比较哪些元素是安全的,哪些不安全。通用版本更安全,因为 Comparable<T>通常与任何 T 相当, 如果 T仅限于 Comparable<? super T> 的实现者, T[] 的所有元素应该相互比较。

关于Java:为什么使用泛型函数比将接口(interface)类型作为函数参数更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com