爲什麼java.util.Iterator
接口有方法remove()
?違反Java核心迭代器中的單一責任原則
當然有時候這種方法是必要的,並且都已經習慣了它的存在。但實際上,迭代器的主要和唯一目標只是提供訪問容器元素。當有人想爲這個界面創建他自己的實現,並且不能或不想以任何理由提供去除元素的能力時,他就會被迫拋出UnsupportedOperationException
。拋出這個異常通常表明一個不太精心設計的架構或一些設計缺陷。
真的,我不明白這樣一個決定的原因。我想這將是更正確地分離特定的子接口支持可選的方法:
任何理由的版本,爲什麼remove()
是Iterator
的一部分?這不是直接違反SOLID
單一責任原則的例子嗎?
實際上,您在這裏提出的「不帶刪除語義的迭代器」相當於遺留的['Enumeration'](http://docs.oracle.com/javase/8/docs/api/java/util/ Enumeration.html)接口,它被Java 1.2中的'Iterator'取代。 –
除了「引入了一種新的基礎集合」之外,其他變化向量是什麼?如果您認爲SRP是「做太多事情」而不是「有太多改變的原因」,那麼您最終會遇到一些瘋狂的正常形式,其中程序中的每種方法都有自己的界面。 – Affe