0

我正在使用可写列表来存储用户添加到应用程序的数据集数据。

public class AplotDataModel  {

 IObservableList observableList = new WritableList();
 private static AplotDataModel instance = null;

 //////////////////////////////////////////////////////////////////////////
 //                         Constructor                                  //
 //////////////////////////////////////////////////////////////////////////
 private AplotDataModel() {

 }// end Constructor

 //////////////////////////////////////////////////////////////////////////
 //             SingletonSelectTable getInstance()                       //
 //////////////////////////////////////////////////////////////////////////
 public static AplotDataModel getInstance() {
    if (instance == null) {
       instance = new AplotDataModel();
  }
 return instance;
 }


 //////////////////////////////////////////////////////////////////////////
 //                              add()                                   //
 //////////////////////////////////////////////////////////////////////////
 public void add(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
    AplotDatasetData pp = new AplotDatasetData(tcRevision, selectedDataset);
       if (!observableList.contains(pp)) {
          observableList.add(pp);
       }
 }

 //////////////////////////////////////////////////////////////////////////
 //                       clearTableArray()                              //
 //////////////////////////////////////////////////////////////////////////
 public void clearTableArray() {
    observableList.clear();
 }
}// End Class

在 ADD 方法中,我使用一个类来格式化数据以添加到可写列表中

AplotDatasetData pp = etc.....

班级

public class AplotDatasetData {

  TCComponentItemRevision rev;
  TCComponentDataset   componentdataset;
  String markUp = "no";

  //////////////////////////////////////////////////////////////////////////
  //                           Constructor                                //
  //////////////////////////////////////////////////////////////////////////
  public AplotDatasetData(TCComponentItemRevision tcRevision, TCComponentDataset selectedDataset) {
     rev = tcRevision;
     componentdataset = selectedDataset;

  }// end Constructor

  //////////////////////
  //   getDataset()   //
  //////////////////////
  public TCComponent getDataset() {
     return componentdataset;
  }

  //////////////////
  //   getRev()   //
  //////////////////
  public TCComponent getRev() {
     return rev;
  }

  //////////////////
  //   equals()   //
  //////////////////
  @Override
  public boolean equals(Object o) {
     AplotDatasetData p = (AplotDatasetData) o;
     if (rev.equals(p.getRev()) && componentdataset.equals(p.getDataset())) {
       return true;
      }
     else {
        return false;
      }
  }// end equals()

我的代码编译 - 但我运行了一个涉及可写列表的操作。我收到以下错误。

错误:11:31:00,591 - TcLogger$IC_LogListener.logging:? org.eclipse.core.runtime - org.eclipse.ui - 0 - 未处理的事件循环异常 org.eclipse.swt.SWTException:无法执行可运行(java.lang.ClassCastExc eption:org.eclipse.core.databinding.observable。 list.WritableList 不能转换为 com.lexmark.aplot.datamodels.AplotDataModel$AplotDatasetData) 等.....

原因:java.lang.ClassCastException:org.eclipse.core.databinding.observable .list.WritableList 无法在 com.lexmark.aplot.datamodels.AplotDataModel$AplotDatasetData 中转换为 com.lexmark.aplot.datamodels.AplotDataModel $AplotDatasetData。等于(一个 plotDataModel.java:167)

我知道问题出在 Equals 方法中,但我不确定如何更改它,因此它将与可写列表一起使用。

编辑

我将问题追溯到这个

ArrayList<AplotDataModel.AplotDatasetData> tableData = new ArrayList<AplotDataModel.AplotDatasetData>(AplotDataModel.getInstance().getObservableList());

我正在尝试使用可写列表中的数据创建一个新的数组列表

4

1 回答 1

0

问题出在 Equals 方法中。我必须使方法更健壮。

 ////////////////////
  //   hashCode()   //
  ///////////////////
  @Override
  public int hashCode() {
     final int prime = 31;
     int result = 1;
     result = prime * result + getOuterType().hashCode();
     result = prime * result
           + ((componentdataset == null) ? 0 : componentdataset.hashCode());
     result = prime * result + ((rev == null) ? 0 : rev.hashCode());
     return result;
  }

  ////////////////////
  //    equals()    //
  ////////////////////
  @Override
  public boolean equals(Object obj) {
     if (this == obj)
        return true;
     if (obj == null)
        return false;
     if (getClass() != obj.getClass())
        return false;
     AplotDatasetData other = (AplotDatasetData) obj;
     if (!getOuterType().equals(other.getOuterType()))
        return false;
     if (componentdataset == null) {
        if (other.componentdataset != null)
           return false;
     }
     else if (!componentdataset.equals(other.componentdataset))
        return false;
     if (rev == null) {
        if (other.rev != null)
           return false;
     }
     else if (!rev.equals(other.rev))
        return false;
     return true;
  }

  private AplotDataModel getOuterType() {
     return AplotDataModel.this;
  }
于 2013-02-06T18:11:02.603 回答