在这种情况下,我有两个类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 typeCollections
is not
applicable for the arguments(List<C<A>>)
. The inferred typeC<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> ;,您可以实现以下目标
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);