为什么不 Map#removeAll(Collection<?>)?
2022-09-02 22:00:06
为什么Java中的接口没有像它那样删除键的方法?Map
removeAll(Collection<?> c)
map.remove(Object)
我知道我总是可以做到..但这是一个没有的理由,并鼓励我们去?map.keySet().removeAll(..)
Map
removeAll()
map.keySet().removeAll(..)
为什么Java中的接口没有像它那样删除键的方法?Map
removeAll(Collection<?> c)
map.remove(Object)
我知道我总是可以做到..但这是一个没有的理由,并鼓励我们去?map.keySet().removeAll(..)
Map
removeAll()
map.keySet().removeAll(..)
集合 API 背后的理念是尽可能小巧简单。地图上的“集合”视图允许您已执行此操作,因此无需额外的方法。
keySet 方法返回映射的视图。键集上的操作将反映在地图上。
关于接口设计的更一般的问题:为什么接口X没有方便的方法Y?在Martin Fowler关于MinimalInterface与HumaneInterface的讨论中得到了更深入的解决。
因为地图不是集合,所以不扩展集合接口。映射实现 USE 集合接口以提供它们自己的功能。
想想这样的情况:
地图可以提供以下方法:
但在这种情况下,你有三种方法,而不是一个。
所以把 remove所有方法都放到 Map 接口上不清楚要了解哪些类型的对象应该被检查和删除——键、值、两者还是对。