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:runnableの実行に失敗しました(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にキャストできません。 equals(A 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 に答える