【发布时间】:2020-07-26 23:31:13
【问题描述】:
我最近在阅读Java Concurrency in Practice,第一次接触到Collections.unmodifiableMap(...)方法。该方法在现有Map 周围创建一个只读包装器,并且任何修改返回的Map 的尝试都将(根据Javadocs)导致UnsupportedOperationException 被抛出。其他集合类也存在类似的方法。
这让我很担心,因为unmodifiableMap() 仍然返回Map,但不支持所有相关方法。事实上,它还会在写入操作中引发异常,这意味着它不能在大多数应用程序中替换“正确的”Map。
我是一名学生,对自己识别设计缺陷的能力还没有信心,但这些是否分别违反了Interface segregation 和Liskov substitution 原则?
【问题讨论】:
-
令我震惊的是,它可能不会违反 I 原则,因为这与接口的创建者有关,而不是客户端。
-
Map接口文档,实现可能选择不支持其所有方法。老实说,这是一种设计妥协,在实践中效果很好。 -
@LouisWasserman 谢谢,我错过了。如果你把它作为一个答案,我会关闭这个问题。
标签: java oop solid-principles