Re: [問題] UnsupportedOperationException?
※ 引述《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
討論串 (同標題文章)