泛型如何编写比较器来泛化Java中的两种类型的对象?
我使用下面的方法调用返回一个对象列表
final List<LinkModelSpi> documentLinks = this.documentLinksModelSpi.getDocumentLinks();
接下来,我使用Comparator
对这个列表进行排序。但列表包含两种类型的对象。有些函数操作返回文档LinkModelImpl,有些函数操作返回LinkModelImpl。所以,当LinkModelImple更改为DocumentLinkModelImpl时,Comparator函数传递了类强制转换异常。这两个对象的父类型也不同
// Add This method for Sorting Document Link View Same Order. Now The application display same links order
// in catalogue administration edit drug window
Collections.sort(documentLinks,
(Comparator<? super LinkModelSpi>) new Comparator<DocumentLinkModelImpl>() {
@Override
public int compare(DocumentLinkModelImpl o1, DocumentLinkModelImpl o2) {
return o1.getResource().compareTo(o2.getResource());
}
/*@Override
public int compare(LinkModelImpl o1,LinkModelImpl o2) {
return o1.getResource().compareTo(o2.getResource());
}*/
});
我需要专家帮忙解决这件事吗
注: 我新添加了上面的sort方法,但在添加之前,该方法对所有对象都执行得很好
final List<LinkModelSpi> documentLinks = this.documentLinksModelSpi.getDocumentLinks();
for (final LinkModelSpi documentLinkModelSpi : documentLinks)
{
//noinspection unchecked
((DtoPresentationModelSpi<?, MDTO>) documentLinkModelSpi).addPropertyChangeListener(this);
}
-------错误----------------------
Presentation.impl.LinkModelImpl cannot be cast to Presentation.impl.DocumentLinkModelImpl
at Client.catadmin.view.component.AbstractEditLinkDialog$1.compare(AbstractEditLinkDialog.java:171)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.util.TimSort.sort(TimSort.java:220)
# 1 楼答案
我解决了上面添加此代码片段的问题。但我需要知道一些更高级的解决方案,如果知道的话