首页 文章

麻烦了解可比较的<T>演员

提问于
浏览
0

我刚写了一个带有两个参数的方法: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版本中被强制转换 . 所以当我向我的arLst添加一个obj时,该对象应该被转换回类型T,对吗?另外,有没有更简单的方法来比较未知类型T的包装类对象?

1 回答

  • 4

    您可以强制 T 也扩展 Comparable<? super T> :1

    public static <T extends Number & Comparable<? super T>>
    ArrayList<T> lessThan(ArrayList<T> lst, T number) {
        ...
    }
    

    然后你可以删除演员 .


    1.参见例如泛型的解释<T extends Comparable <? superT >>在collection.sort /可比代码?为什么我们不只是使用Comparable <T> .

相关问题