使用不受支持的库,引导我进行投射

时间:2012-07-17 07:25:00

标签: java casting

我必须与这个处理生物多样性标准的图书馆合作。本质上,它读入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;

1 个答案:

答案 0 :(得分:0)

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

DarwinCoreRecord视为多边形,将DWCRecordStore视为方形,您始终可以将方形(DWCRecordStore)投射到多边形(DarwinCoreRecord) - 但不能另一种方式。

可能是您试图将从小文件中返回的对象存储为DWCRecordStore。但是图书馆不熟悉DWCRecordStore,它只返回DarwinCoreRecordDWCRecordStore个对象。

精确定位问题可能需要更多代码 - 完全如何使用新课程。

编辑:您的上一次修改澄清了它,因为dwc不是DWCRecordStore的实例,因此无法将其转换为一个。

替代方案可能是创建构造函数:DWCRecordStore(DarwinCoreRecord),并使用:

drs = new DWCRecordStore(dwc);