java-对通用接口列表进行排序

在这种情况下,我有两个类A,B和一个通用接口C

Class A implements Comparable<A> {...}

interface C<T> {...}

//this class is not longer generic type, I do not know if this matter.
Class B extends A implements C<A> {...} 

然后,在另一堂课上,我得到了一个B列表,并按照以下顺序对其进行排序

List<B> list = new ArrayList<B>();
Collections.sort(list);

这可以完美地工作,但是现在我想将B的列表更改为通用接口C,以便可以更通用.

List<C<A>> list = new ArrayList<C<A>>();
Collections.sort(list);

这次我得到如下错误:

Bound mismatch: The generic method sort(List<T>) of type Collections is not
applicable for the arguments (List<C<A>>). The inferred type C<A> is not a
valid substitute for the bounded parameter <T extends Comparable<? super T>>

我已经尝试了以下修改(当然不起作用):

>将C更改为接口C T.扩展Comparable< T> {…}
>将B改变为类B,扩展了A实现C A,Comparable T. {…}

有谁能够帮助我?

解决方法:

change C to interface C extends Comparable{…}
Class B extends A implements C {…}

如您从错误消息中已经看到的那样,这两个将不能一起工作,因为B的定义与Comparable< A>会发生冲突.和可比较的C A.

由于A已经在实现Comparable< A&gt ;,您可以实现以下目标

List<C<A>> list = new ArrayList<C<A>>();
Collections.sort(list);

通过定义C A的比较器来实现.如下:

class CTComparator<T> implements Comparator<C<T>>
{
    @Override
    public int compare(C<T> o1, C<T> o2)
    {
        return 0;
    }
}

然后使用此比较器应用sort方法:

List<C<T>> list  = new ArrayList<C<T>>();
Collections.sort(list, comparator);
上一篇:Java中整数数组中的操作交换或比较比较昂贵


下一篇:java-对按降序排序的int数组使用二进制搜索