Re: [問題] UnsupportedOperationException?

看板java作者 (Alien)時間16年前 (2010/01/25 14:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《tkcn (小安)》之銘言: : 其實我對前幾天那篇很有興趣, : 可是不知道為什麼沒有後續,文章也不見了 @_@ : 所以我就自己來冒名頂替一下吧。 : // Returns a fixed-size list backed by the specified array. : Arrays.asList(T... a) : 上面這個 method 會回傳一個 Arrays$ArrayList 物件, : ArrayList 繼承自 AbstractList, : 因為沒有 override add() 與 remove(), : 所以一但執行 add() 或 remove(), : 就會丟出 UnsupportedOperationException。 : 看起來一切都合情合理, : 畢竟 Arrays$ArrayList 骨子裡是 Array, : 要是能支援 add, remove 那才奇怪的勒 : (java.util.ArrayList 內部雖然也是 Array,但是他始亂終棄) : 讓我感到疑惑的是,這樣設計的目地到底是什麼? : List 介面明明有提供 add, remove, : 實作他的類別卻只會丟出 UnsupportedOperationException, : 這樣是一個合理的 OO 設計嗎? : 如果不是,那是否有什麼其他的考量呢? 與是不是 array 沒關係. 為什麼內部用 array 放就不可以 add remove? 單純只是那個是一個 unmodifiable list 而已吧. 既然是一個 non-modifiable list, 當然不讓你 去增刪裡面的 elements. 是不是合理的 OO 設計, 這就見仁見智了. 反正 它的 contract 也說明了容許 implementation 不支援某些功能的話, 也不可以說有多錯... 或者有人會覺得把 add/remove 放到一個叫 ModifiableList 的 interface, 但我想當初設計上不這樣做, 是 多 了這一層的 interface, 用起來就會很麻煩. 反正 90% 情況下用 collection 都是不需要特 定當做 unmodifiable 來使用, class hierarchy 搞得太複雜, 用起來會很混亂, 究竟什麼時候 parameter 要宣告用 modifiable list 什麼時候 要用 (unmodifiable) list 呢? 諸如此類... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82
文章代碼(AID): #1BNJgy7w (java)
討論串 (同標題文章)
文章代碼(AID): #1BNJgy7w (java)