为了账号安全,请及时绑定邮箱和手机立即绑定

Java 通用比较器

Java 通用比较器

米脂 2021-09-15 16:54:31
public class arr<T>{    class comp <T extends Comparable<T>> implements Comparator<T>    {        public int compare(T lObj,T rObj)        {              return lObj.compareTo(rObj);        }    }    ArrayList<T> list;    Comparator<T> comparator;    public arr()    {        list = new ArrayList<T>();        comparator = new comp();    }    public void add(T data)    {        list.add(data);             }    public int getLength()    {        return list.size();    }    public T get(int index)    {        return list.get(index);    }    public void sort()    {        list.sort(comparator);    }}您好,我正在尝试使排序功能正常工作,但遇到了问题。在arr构造函数中,如果我写comparator = new comp<T>();它给了我一个错误说"type argument T#1 is not within bounds of type-variable T#2 comparator = new comp<T>();                            ^where T#1,T#2 are type-variables:T#1 extends Object declared in class arrT#2 extends Comparable<T#2> declared in class arr.comp"如果我取出类型并像这样写comparator = new comp;然后它确实有效,但给了我一个警告说warning: [rawtypes] found raw type: arr.compcomparator = new comp();我可以看到原始类型的含义。我没有指定类型,但它以某种方式起作用,如果我尝试通过指定类型来修复警告,则会引发错误。你能帮我弄清楚吗?我知道......我是个菜鸟,我的代码一定会让你眼花缭乱。我正在使用通用比较器并尝试很多东西来熟悉。谢谢你。
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您的代码是混淆了你,因为T通过定义comp是躲藏在T被定义arr。对于下面的解释,我将它们称为Tcomp和Tarr。


Tcomp需要扩展Comparable,但Tarr不需要这样做,这意味着Tarr不能“映射”到Tcomp.


要修复,请更改,Tarr因此还需要扩展Comparable:


public class arr<T extends Comparable<T>>

附带说明:

您的comp类是一个内部类,但它不使用外部类中的任何内容,因此它应该是一个静态嵌套类:


static class comp<T extends Comparable<T>> implements Comparator<T>

或者,comp作为一个内部类,让它重用T来自外部类的:


class arr<T extends Comparable<T>>

{

    class comp implements Comparator<T>

但是,由于 Java(8 或更高版本)带有Comparator用于比较Comparable对象的实现,您应该使用它:


public class arr<T extends Comparable<T>>

{

    ArrayList<T> list;

    Comparator<T> comparator;

    public arr()

    {

        list = new ArrayList<T>();

        comparator = Comparator.naturalOrder();

    }

    // rest of code

}


查看完整回答
反对 回复 2021-09-15
  • 1 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信