2017-05-26 59 views
0

出於某種原因,我已經能夠在AbstractList的擴展上執行removeAll。方法沒有拋出UnsupportedOperationException,儘管它應該

特別是那個列表是一個java.util.Arrays.Arraylist(它不是java.util.ArrayList),它是不支持remove或add的AbstractList的擴展。

更改以下行

Set<String> defaultList = new HashSet<>(Arrays.asList(getDefaultNames())); 
    Set<String> names = new HashSet<>(_adapter.getContainerNames()); 

    defaultList.removeAll(names); 

List<String> defaultList = Arrays.asList(getDefaultNames()); 
    List<String> names = _adapter.getContainerNames(); 

    defaultList.removeAll(names); 

後,我能夠編譯代碼,執行它,看看在排序順序列表,甚至完全在卸載應用程序之後。

吃回來,刪除所有斷點後(我有一個斷點在每一行),和新舊版本之間切換了幾次(檢查出的git每個版本,編譯和安裝)而不是有排序的列表,我得到了一個UnsupportedOperationException。

現在我從android.jar.java.util.Arrays開放源代碼中可見的實現中發現,這應該從未執行過。

我很困惑,我猜這是某種緩存錯誤,或者由於可能沒有建立乾淨的,但怎麼會發生這樣的事情呢?

這是預期和可能重現的嗎?

我怎樣才能避免在將來呢?我每次都必須建立清潔嗎?

斷點是否阻止了該代碼正確構建乾淨?

回答

1

有一些可能的解釋,你已經提到了一些。對我來說,似乎最可能的解釋是,在你的情況下,如果你真的試圖通過它移除一個或多個元素,removeAll()只會拋出一個UnsupportedOperationException

我只是嘗試這樣做:

Arrays.asList("Ole", "No").removeAll(Collections.singletonList("HopefullyHelpful")); 

它運行罰款我的電腦上,沒有任何異常的跡象。我使用的是Java 8,所以它可能在Android上無法正常運行,但您可以嘗試。儘管如此,我沒有在文檔中找到任何可以實現這一點的內容。

雖然以前的構建仍然是另一種可能的解釋,但您的斷點當然不應該與您的觀察有任何關係。

相關問題