有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型如何编写比较器来泛化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) 个答案

  1. # 1 楼答案

    我解决了上面添加此代码片段的问题。但我需要知道一些更高级的解决方案,如果知道的话

    if (Checks.checkNotNullAndNonEmpty(documentLinks)) {
      if (this.documentLinksModelSpi.getDocumentLinks().iterator().next() instanceof DocumentLinkModelSpi) {
    
      } else {
    
      }
    }