java - Collections.unmodifiableMap (和其他)是否违反了 SOLID 原则?
问题描述
我最近在看书Java Concurrency in Practice
,第一次接触到这种Collections.unmodifiableMap(...)
方法。该方法围绕现有创建一个只读包装器,Map
并且任何修改返回的尝试Map
都会(根据Javadocs
)导致UnsupportedOperationException
被抛出。其他集合类也存在类似的方法。
这让我很担心,因为 anunmodifiableMap()
仍然返回 a Map
,但不支持所有相关方法。它还在写操作上引发异常的事实意味着它不能Map
在大多数应用程序中替换“正确”。
我是一名学生,对自己识别设计缺陷的能力还没有信心,但是这些分别是不是违反了Interface segregation
和Liskov substitution
原则?
解决方案
Map 接口记录了实现可以选择不支持它的所有方法,这使得Collections.unmodifiableMap
返回一个满足接口契约的实现。
虽然接口以这种方式实现其方法“可选”是不寻常的,但这是一种设计折衷,在实践中效果很好。大多数集合应该只编写一次,然后一次又一次地读取,因此修改映射的代码通常是创建它的代码并且知道它是可变的。
推荐阅读
- r - 如何根据列名存储在变量中的列值过滤 data.table
- spring - Kotlin > Spring Boot > 使用路由器 DSL,POST 方法主体,无法将 JSON 转换为 POJO
- c# - 将 xsd 枚举转换为枚举 c#
- javascript - OpenWeather API,如何将一个响应的响应传递给另一个调用?
- matplotlib - 如何在带有 ipympl 后端的 Matplotlib 的 x 轴上显示月和在页脚标签上显示日
- sqlite - 查找 SQLite 服务器
- firebase - 在 vue 的输入中使用 @change 更新 Firestore 数据
- javascript - 单击而不是输入或键入时过滤列表
- c++ - 在 { } | 内缩小从 int 到 char 的转换 char 的签名问题
- c# - 如何转换列表
> 到 IEnumerable