1

javaのinstanceofに問題があります。これが私に問題を引き起こすコードのギャップです:

LinkedList<Double> currentSummary = summary.getFirst().getQuantiles();

...その他のコード...

while (!currentSummary.isEmpty()){

        if (currentSummary.getFirst() instanceof Double){
            orderedSummary.add(new ComparableWrapper<Double, Float>(currentSummary.removeFirst(), currentEpsilon));
        }
}

ですから、私の問題は、if条件が真にならないということです。のこれらの要素は、または-valueのcurrentSummaryいずれかです。そして、私はである要素を拒否しようとしています。最初はそれらを追加しただけで、後で遭遇しました。これは、いくつかの(すべてではありません!)要素がであるためです。の要素の例は、たとえば[null、0.09861866469135272、10.137051035535745、107.12083740100329、371.4371264801424、827.432799544501、1206.251577083686]です。nullDoublenullNullPointerExceptionnullcurrentSummary

誰かがinstanceofその場合になぜ機能しないのか考えましたか?私もやってみましcurrentSummary.getFirst() instanceof Objectた...

前もって感謝します!

4

4 に答える 4

2

完全なリストをトラバースするために、各反復で最初のエントリを削除したいとします。ただし、instanceof条件がtrueの場合にのみエントリを削除します。したがって、最初のnull値に遭遇すると、ループは無限になるように見えます(コードの一部を削除し、完全なループ本体が表示されない場合を除く)

于 2010-07-03T08:40:24.457 に答える
0

自動ボックス化/アンボックス化により、Doubleオブジェクトがプリミティブにアンボックス化され、クラスdoubleのインスタンスではなくなる可能性はありますか?Double

その場合は、代わりにnull以外の要素をチェックする方がよいでしょうか。

于 2010-07-03T08:28:35.467 に答える
0

単純なヌルチェックを使用してみませんか?

if (currentSummary.getFirst() != null){ ... }
于 2010-07-03T08:30:08.937 に答える
0

LinkedList(の代わりに) raw型を使用することにより、に非エントリをLinkedList<Double>追加することができます。それらの要素はテストに失敗します。しかし、それらのエントリはテストに合格します。DoubleLinkedList<Double>instanceof Doubleinstanceof Object

于 2010-07-03T09:18:18.003 に答える