java - Collections.unmodifiableMap(和其他)是否违反了 SOLID 原则?

标签 java oop solid-principles

我最近在阅读Java Concurrency in Practice,第一次接触到Collections.unmodifiableMap(...) 方法。该方法围绕现有 Map 创建一个只读包装器,任何修改返回的 Map 的尝试都将(根据 Javadocs)导致抛出 UnsupportedOperationException。其他集合类也存在类似的方法。

这让我很担心,因为 unmodifiableMap() 仍然返回一个 Map,但不支持所有相关方法。事实上,它还会在写操作时抛出异常,这意味着它无法在大多数应用程序中替代“适当的”Map

我是一名学生,对自己识别设计缺陷的能力还没有信心,但这些是否分别违反了接口(interface)隔离里氏替换原则?

最佳答案

实现可能选择不支持其所有方法的 Map 接口(interface)文档,这使得 Collections.unmodifiableMap 返回满足接口(interface)契约的实现。

虽然接口(interface)以这种方式“可选”实现其方法并不常见,但这是一种在实践中工作得很好的设计折衷。大多数集合应该只写入一次,然后一次又一次地读取,因此修改映射的代码通常是创建它的代码并且知道它是可变的。

关于java - Collections.unmodifiableMap(和其他)是否违反了 SOLID 原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62420172/

相关文章:

java - JBoss Seam - @In 注释不能与不同属性的访问器方法同时使用吗?

java - android 如何检查哪个按钮被点击?

oop - 单一职责原则的范围是什么?

Java 接口(interface)方法 - 作为 Number 的子级的参数和返回值类型

design-patterns - 单一职责原则的范围是什么?它如何与 DRY 一起工作?

c# - 自动注入(inject)调用

java - 在 Playframework 中关闭 WSClient 时出现问题

java - 将 JSlider 的间距设置为十的倍数

java - JAX-RS 使用@consume 注释支持所​​有媒体类型

C++ 编译器错误 : No matching function for call