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 ステートメントは完璧で、適切な詳細を出力します。その print ステートメントを for ループの外側に出力すると、すべてが null になります。

だから、私の質問に(誰かが上記を解決できない限り)。この 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

-にキャストしようとしてDarwinCoreRecordDWCRecordStoreますが、最初のインスタンスは 2 番目のインスタンスではありません!

DarwinCoreRecord多角形および正方形と考えてください。正方形 ( ) を多角形 ( ) にDWCRecordStoreいつでもキャストできますが、その逆はできません。DWCRecordStoreDarwinCoreRecord

ロブラリから返されたオブジェクトを として格納しようとしている可能性がありますDWCRecordStore。しかし、ライブラリは に慣れていないため、 ではないオブジェクトDWCRecordStoreのみを返します。DarwinCoreRecordDWCRecordStore

正確な問題を特定するには、より多くのコードが必要になる場合があります-新しいクラスをどのように正確に使用しましたか。

編集:dwcのインスタンスではないため、最後の編集で明確になります。インスタンスにDWCRecordStoreキャストすることはできません。

別の方法として、コンストラクターを作成し、次DWCRecordStore(DarwinCoreRecord)を使用することもできます。

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