2013-02-05 1 views
0

쓰기 가능한 목록을 사용하여 사용자가 응용 프로그램에 추가하는 데이터 집합 데이터를 저장하고 있습니다. 추가 방법은 WritableList 캐스팅 문제

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 

, 나는

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() 

내 코드는 컴파일 -하지만이 실행 쓰기 가능한 목록과 관련된 작업. 다음 오류가 발생합니다.

ERROR: 11:31:00,591 - TcLogger$IC_LogListener.logging:? org.eclipse.core.runtime - org.eclipse.ui - 0 - Unhandled event loop exception org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.ClassCastExc eption: org.eclipse.core.databinding.observable.list.WritableList cannot be cast to com.lexmark.aplot.datamodels.AplotDataModel$AplotDatasetData) etc .....

Caused by: java.lang.ClassCastException: org.eclipse.core.databinding.observable .list.WritableList cannot be cast to com.lexmark.aplot.datamodels.AplotDataModel $AplotDatasetData at com.lexmark.aplot.datamodels.AplotDataModel$AplotDatasetData.equals(A plotDataModel.java:167)

나는 문제가 Equals 메서드에 알고,하지만 난 그것을 변경하는 방법을 확실하지 않다, 그래서 쓰기 가능한 목록과 함께 작동합니다.

편집

가 나는 문제가 같음에 있던 writablelist

답변

0

의 데이터를 사용하여 새로운 ArrayList를 만들려고하고이

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

에 문제를 추적 방법. 나는이 방법을보다 강건하게 만들어야했다.

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