2015-03-18 53 views
1

我有一系列的POJO,我一直在使用龍目島來填寫和事情已經很順利。我已經開始使用Java 8的可選<>類來做可選的事情,但是在將字節數組設置爲可選時,我遇到了一個問題。在我的單元測試,比較對象的罰款比較這個類的兩個實例建立以同樣的方式:龍目島EqualsAndHashCode處理可選陣列

@NoArgsConstructor @Getter @Setter @EqualsAndHashCode @ToString 
public class Attachment { 
    private String contentType; 
    private LanguageCode language; 
    private byte[] data; 
    private URI url; 
    private String title; 
} 

我可以做的contentType,語言,鏈接和標題所有可選<>和測試仍然通過,但當我使數據可選時,測試突然失敗。

private Optional<byte[]> data; 

結果:

expected 
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[[email protected]], url=Optional[test://testuri], title=Optional[test text])] 
but found 
[Attachment(contentType=Optional[UTF-8], language=Optional[en], data=Optional[[[email protected]], url=Optional[test://testuri], title=Optional[test text])] 

是否有處理可選的陣列,使龍目島可以處理比較任何具體的方法是什麼?

+0

您是否將這個註冊爲bug? https://code.google.com/p/projectlombok/issues/detail?id=798&q=array&colspec=ID%20Type%20Status%20Priority%20Target%20Component%20Owner%20Summary 如果沒有,至少有一個其他遇到同樣問題的人。我的猜測是這是一個錯誤。龍目以前有一些Java 8相關的問題。 – Magnilex 2015-04-08 12:18:40

回答

2

龍目島有特殊的魔力;它知道數組不會正確地遵守equals約束,而是使用Arrays.equals。

可選<>不像龍目島那麼聰明,並沒有考慮到這一點。我們無法真正解決這個問題。這是可選的問題。

可選的一般是非常有限的想法,在非常有限的從流API方法返回它的域之外的任何地方。你不應該在這裏使用它,特別是不能用作任何字段或任何參數的類型。只是不要使用它。這對於陣列來說是雙倍的;只需使用一個空數組。請注意:泛型和數組不能混用。理由#9103,可選是一個壞主意的Java。

+0

不幸的是,這是我們得出的結論。我們試圖在我們的API中加入Optional,但遇到了很多根本無法解決的問題。隨着可選,唯一的獲勝動作是不玩。 – directedition 2015-08-19 22:21:46