我刚写了一个带有两个参数的方法:1。扩展Number的任何类型的数组列表,以及2.相同类型的数组。此方法应返回小于第二个参数的所有数字的数组列表。
我的班级名为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版本中被强制转换。所以当我向我的arLst添加一个obj时,该对象应该被转换回类型T,对吗? 另外,有没有更简单的方法来比较未知类型T的包装类对象?
答案 0 :(得分:4)
您可以强制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>
。