我使用下面的方法調用來返回對象列表。如何編寫比較器來在Java中概括兩種類型的對象?
final List<LinkModelSpi> documentLinks = this.documentLinksModelSpi.getDocumentLinks();
接下來我使用了Comparator
對這個列表進行排序。但List包含兩種類型的對象。有些功能的工作原理是返回DocumentLinkModelImpl和一些功能操作它返回LinkModelImpl。所以,比較函數傳遞類轉換異常時LinkModelImple變化DocumentLinkModelImpl兩個對象父類型。這也順從。
// 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)
您的'DocumentLinkModelImpl'是'LinkModelSpi'的子類型,並且查看您註釋掉的代碼,getResource函數在'LinkModelSpi'上可用 - 那麼爲什麼不製作比較器僅用於'LinkModelSpi'?它可以用於* LinkModelSpi的* any *子類型,包括'DocumentLinkModelImpl'。 –
但先生它通過錯誤。我會將錯誤添加到問題 – uma