某天碰到這樣一個報錯:
java.lang.UnsupportedOperationException
不支援的操作異常,然後就去檢查代碼,發現了這個List方面的坑。
同僚的代碼中有一個方法A中在其中一種情況下,return Collections.emptyList(); 然後他在另一個方法B中調用了這個A方法,對A方法傳回的結果進行了繼續操作,比如 list.add("xxx");這個地方就報錯了。
然後去檢視了Collections.emptyList()的源碼,如下:

這個EmptyList是Collections中的一個内部類,繼承了AbstractList這個抽象類。
接下裡檢視AbstractList,
原因找到了,父類中就是直接抛出這個異常,子類也并沒有重寫這個方法。
Arrays.asList()方法也有這樣類似的問題,這個方法傳回的ArrayList是下面這個Arrays中的内部類,存在上述同樣的問題。
是以在使用這些方法傳回List的時候,如果需要對傳回的List進行增删之類的操作,不要直接操作,可通過new ArrayList<>(list); 生成一個新的List再進行操作,進而避免這個問題
以上。