2013-05-01 81 views
0


我在多個線程中發現此問題並嘗試了建議的答覆。但沒有取得成功。「比較方法違反其總體合同!」:java 7與日期數據的錯誤

@Override 
public int compareTo(CustomObject o) { 
    try { 
     if (getOriginalActionDate() == null || o.getOriginalActionDate() == null) { 
      return -1; 
     } 
     return new SimpleDateFormat("MM/dd/yyyy").parse(
       getOriginalActionDate()).compareTo(
       new SimpleDateFormat("MM/dd/yyyy").parse(o 
         .getOriginalActionDate())); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return 0; 
} 

請讓我知道我在做什麼錯在這裏:下面

我的代碼被提及?在這方面任何指針都會非常有幫助。

感謝,
戈帕爾LAL

+0

你還打擾過谷歌嗎? – 2013-05-01 14:39:11

+0

是的..我用它搜索了一下。但正如我所提到的,我嘗試了很多在不同的線程中提到的選項,但沒有取得成功。 – 2013-05-01 14:42:07

回答

4

當兩個Date s爲null,你應該返回0而不是-1

對於所有x和y,實現者必須確保sgn(x.compareTo(y))== -sgn(y.compareTo(x))。 (這意味着則x.compareTo(Y)如果y.compareTo(X)拋出異常必須拋出異常。)

的代碼貼出來,當日期在兩個物體null

x.compareTo(y) == y.compareTo(x) == -1 

這違反了合同。

要修復的方法中,更改if爲空校驗到:

if (getOriginalActionDate() == null && o.getOriginalActionDate() == null) { 
    return 0; 
} else if (getOriginalActionDate() == null) { 
    return -1; 
} else if (o.getOriginalActionDate() == null) { 
    return 1; 
} 

因此,如果兩者都爲空,則返回值將是0(等於),否則null將是關於作爲較小的對象。

+0

@juergen d這是我在本週發表的另一個愚蠢的錯字,謝謝。 – 2013-05-01 14:44:49

+0

我用0試過,但沒有成功。 – 2013-05-01 15:27:00

+0

你改變了什麼?只需更改-1 - > 0不會改善事情,那麼在檢查是否爲== null並在此情況下返回0之前,您需要檢查兩個== null。 – 2013-05-01 17:07:20

相關問題