1

我必须与这个处理生物多样性标准的图书馆合作。本质上,它读取 csv、xml 等文件并对其进行验证,允许人们遍历DarwinCoreRecord类型的记录

出于某种奇怪的原因,一旦对象从迭代器中移出,它就消失了。下面的小例子:

           ArrayList<DarwinCoreRecord> dwc = new ArrayList<DarwinCoreRecord>();
            for(; iter.hasNext();) {
            DarwinCoreRecord record = iter.next();
                    System.out.println(record.getSomeValue());
            dwc.add(record);
        }

该打印语句是完美的,并且打印出正确的细节,如果我在 for 循环之外输出该打印语句,则所有人都有空值。

所以,关于我的问题(除非有人能解决上述问题)。我创建了一个扩展此 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;
4

1 回答 1

0

您正在尝试DarwinCoreRecord转换为DWCRecordStore- 但第一个不是第二个的实例!

DarwinCoreRecord其视为多边形和DWCRecordStore正方形,您始终可以将正方形 ( DWCRecordStore) 转换为多边形 ( DarwinCoreRecord) - 但反过来不行。

可能是您试图将从 lobrary 返回的对象存储为DWCRecordStore. 但是该库对 不熟悉DWCRecordStore,它只返回DarwinCoreRecord对象,而不是DWCRecordStore.

查明确切的问题可能需要更多的代码——你究竟是如何使用你的新类的。

编辑:您的最后一次编辑澄清了它,因为dwc不是 的实例DWCRecordStore,它不能被强制转换为一个。

另一种方法可能是创建一个构造函数:DWCRecordStore(DarwinCoreRecord),并使用:

drs = new DWCRecordStore(dwc);
于 2012-07-17T07:41:16.850 回答