我使用可写表来存储用户添加到应用程序的数据集数据。
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答案 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;
}