私は抽象クラスCandidateProgram
を持っています。これはComparable
インターフェイスを実装しています。'比較メソッドは、過渡的なエラーの兆候なしで一般的な契約に違反しています。
私のコードの中にはでソートするGRCandidateProgram
というサブクラスのリストがあります。私がソートすると、エラー "java.lang.illegalArgumentException:比較メソッドは、その一般的な契約に違反します!"
私がオンラインで見つけた唯一の答えは、compareTo
メソッドの推移的なエラーが原因である可能性がありますが、これは私のコードでは当てはまりません。次のように私のcompareTo
方法は次のとおりです。ノートのも
@Override
public int compareTo(final CandidateProgram o) {
if (o == null) {
throw new NullPointerException("cannot compare to null");
}
final Double thisFitness = getFitness();
return thisFitness.compareTo(o.getFitness());
}
:エラーは、私は、ソート、唯一時々私は任意のルールを決定することはできませんけれども入力がないエラーをトリガとすると毎回スローされません。たとえば、以下の適応度を持つリストでGRCandidateProgram
の50個のインスタンスは、このエラーが発生することが表示されます。
3.0, 37.0, 70.0, 75.0, 80.0, 128.0, 161.0, 167.0, 172.0, 219.0, 253.0, 258.0, 263.0, 311.0, 344.0, 349.0, 355.0, 397.0, 402.0, 435.0, 441.0, 446.0, 488.0, 493.0, 527.0, 532.0, 537.0, 580.0, 585.0, 618.0, 624.0, 671.0, 676.0, 710.0, 715.0, 762.0, 768.0, 801.0, 806.0, 854.0, 859.0, 887.0, 892.0, 898.0, 945.0, 950.0, 971.0, 979.0, 984.0, 989.0
誰もがこの問題を解決する方法について何かアドバイスはありますか?
FWIW、ヌルチェックは必要ありません - あなたはかなり明確な場所で 'o'を逆参照しようとするNPEを得るでしょう。 – chrylis
'getFitness()'の宣言された型は何ですか? – chrylis
@chrylis:double(プリミティブ型) –