我必须与这个处理生物多样性标准的图书馆合作。本质上,它读取 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() {
}
}
这只是为了测试我的计划是否有效,但我遇到了类广播异常。我已经有一段时间没有处理转换了(至少在 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;
最佳答案
您正在尝试将 DarwinCoreRecord
转换为 DWCRecordStore
- 但第一个不是第二个的实例!
将 DarwinCoreRecord
视为多边形,将 DWCRecordStore
视为正方形,您始终可以将正方形 (DWCRecordStore
) 转换为多边形 (DarwinCoreRecord
) - 但反之则不然。
您可能正在尝试将从库返回的对象存储为 DWCRecordStore
。但该库不熟悉 DWCRecordStore
,它仅返回 DarwinCoreRecord
对象,而不是 DWCRecordStore
。
查明确切的问题可能需要更多代码 - 您到底如何使用新类。
编辑:您的最后一次编辑澄清了这一点,因为 dwc
不是 DWCRecordStore
的实例,因此无法将其转换为一个实例。
另一种方法可能是创建一个构造函数:DWCRecordStore(DarwinCoreRecord)
,并使用:
drs = new DWCRecordStore(dwc);
关于java - 使用不受支持的库,导致我进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11517789/