我必须与这个处理生物多样性标准的图书馆合作。本质上,它读入csv,xml等并验证它,允许用文本迭代 DarwinCoreRecord
的记录由于某些奇怪的原因,只要对象从迭代器中移出,它就会消失。下面的小例子:
ArrayList<DarwinCoreRecord> dwc = new ArrayList<DarwinCoreRecord>();
for(; iter.hasNext();) {
DarwinCoreRecord record = iter.next();
System.out.println(record.getSomeValue());
dwc.add(record);
}
这个print语句是完美的,并打印出正确的细节,如果我在for循环之外输出那个print语句,那么所有人都有空值。
所以,在我的问题上(除非有人能解决上述问题)。我创建了一个扩展这个DarwinCoreRecord的骨架类。它看起来完全像这样:
public class DWCRecordStore extends DarwinCoreRecord {
public DWCRecordStore() {
}
}
这只是为了测试我的计划是否可行,但我得到了classcastexception。我已经处理过铸造已经有一段时间了(至少在Java中)但是我没有看到任何问题。我没有从DWCRecordStore转换为DarwinCoreRecord,所以我看不出问题。
有没有人看到我错过的任何明显内容?
提前致谢。
编辑:抱歉,错误在这里:
java.lang.ClassCastException: org.gbif.dwc.record.DarwinCoreRecord cannot be cast to com.encima.DWCRecordStore
at com.encima.DroolsTest.main(DroolsTest.java:37)
编辑2:添加了对演员的使用。
DWCRecordStore drs = new DWCRecordStore();
DarwinCoreRecord dwc = iter.next();
drs = (DWCRecordStore) dwc;
答案 0 :(得分:0)
您正在尝试将DarwinCoreRecord
转换为DWCRecordStore
- 但第一个不是第二个的实例!
将DarwinCoreRecord
视为多边形,将DWCRecordStore
视为方形,您始终可以将方形(DWCRecordStore
)投射到多边形(DarwinCoreRecord
) - 但不能另一种方式。
可能是您试图将从小文件中返回的对象存储为DWCRecordStore
。但是图书馆不熟悉DWCRecordStore
,它只返回DarwinCoreRecord
个DWCRecordStore
个对象。
精确定位问题可能需要更多代码 - 完全如何使用新课程。
编辑:您的上一次修改澄清了它,因为dwc
不是DWCRecordStore
的实例,因此无法将其转换为一个。
替代方案可能是创建构造函数:DWCRecordStore(DarwinCoreRecord)
,并使用:
drs = new DWCRecordStore(dwc);