使用WritableList转换问题

时间:2013-02-05 17:14:06

标签: java list swt observable

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

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:无法执行runnable(java.lang.ClassCastExc   eption:org.eclipse.core.databinding.observable.list.WritableList无法强制转换    to 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.equals(A   plotDataModel.java:167)

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

修改

我将问题追溯到此

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

我正在尝试使用来自可写列表

的数据创建一个新的arraylist

1 个答案:

答案 0 :(得分:0)

问题出在Equals Method中。我不得不让方法更加健壮。

 ////////////////////
  //   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;
  }