2012-07-17 46 views
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); 
     } 

打印語句是完美的,並打印出右側的詳細信息,如果我指出,外print語句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; 
+1

做,都接受所有的答案,在部分幫助的問題,加了我自己的那些被部分解決的答案。謝謝你提醒我! – 2012-07-17 07:32:32

+0

你能給出*確切*錯誤和它的堆棧跟蹤嗎? (+指向堆棧跟蹤中的相關行?) – amit 2012-07-17 07:35:47

回答

0

您試圖投DarwinCoreRecordDWCRecordStore - 但首先是不是第二個實例!

DarwinCoreRecord爲多邊形和DWCRecordStore正方形的想法,你總是可以投出方(DWCRecordStore)爲多邊形(DarwinCoreRecord) - 而不是周圍的其他方式。

可能是因爲您試圖存儲從作品DWCRecordStore返回的對象。但圖書館不熟悉DWCRecordStore,它只返回DarwinCoreRecord對象,而不是DWCRecordStore

指出確切的問題可能需要更多的代碼 - 你如何使用你的新班級剛好

編輯:上次編輯澄清一下,因爲dwc不是DWCRecordStore例如,它不能被強制轉換爲一個。

另一種可能創建一個構造函數:DWCRecordStore(DarwinCoreRecord),並使用:

drs = new DWCRecordStore(dwc); 
+0

這隻能用來證明我的愚蠢,但我認爲A可以在A是B的擴展時被施放。這只是意味着B不能被施放爲A.是嗎? ? – 2012-07-17 07:43:59

+0

並非完全如果'A'是'B'的擴展 - 並且您有'B b = new A()'對象,那麼'b'可以被轉換爲'A'。但是,如果'B b = new B()',它不能,因爲'b'不是'A'的實例。重要的是'b'的動態類型。您可以使用getClass()反射方法或使用運算符「instanceof」來檢查動態類型是什麼。 – amit 2012-07-17 07:49:57

+0

@ChristopherGwilliams:看看我的編輯,根據您的代碼添加,我可以提供更好的解釋和替代方案。 – amit 2012-07-17 07:53:05