我刚刚编写了一个带有两个参数的方法:1. 扩展 Number 的任何类型的数组列表,以及 2. 相同类型的数字。此方法应返回小于第二个参数的所有数字的数组列表。
我的类(class)叫Quiz3FinalQuestion<T extends Comparable>>
我写的方法看起来像这样,
public static <T extends Number> ArrayList<T> lessThan(ArrayList<T> lst, T number) {
ArrayList<T> arLst = new ArrayList<>();
for (T obj: lst) {
if (((Comparable<T>) obj).compareTo(number) < 0)
arLst.add(obj);
}
return arLst;
}
它按预期工作,但如果我没有 Java 预编译器告诉我将 obj 转换为 Comparable 类型,则这将不会运行。我假设 number 参数在compareTo 的Comparable 版本中进行转换。因此,当我将 obj 添加到 arLst 时,该对象应该被强制转换回 T 类型,对吗? 另外,是否有更简单的方法来比较未知类型 T 的包装类对象?
最佳答案
您可以强制执行 T
还延伸Comparable<? super T>
:1
public static <T extends Number & Comparable<? super T>>
ArrayList<T> lessThan(ArrayList<T> lst, T number) {
...
}
然后你就可以移除石膏了。
<小时/><子>1。参见例如Explanation of generic <T extends Comparable<? super T>>
in collection.sort/ comparable code?为什么我们不只使用 Comparable<T>
.
关于java - 无法理解 Comparable<T> 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702409/