【问题标题】:Which collection class in java breaks the S.O.L.I.D Principle? [closed]java中的哪个集合类违反了S.O.L.I.D原则? [关闭]
【发布时间】:2014-09-15 23:43:05
【问题描述】:

我在一次采访中被问到哪个系列违反了 S.O.L.I.D 原则??

谁能解释它是哪一个以及如何?

【问题讨论】:

  • 我同意,似乎是真正的问题。
  • 有人问我这个我没有回答,你建议我应该如何格式化?欢迎任何建议

标签: java ooad


【解决方案1】:

Java 提供了一个名为 IdentityHashMap<K,V> 的通用集合,它违反了 Liskov 替换原则 - SOLID 中的“L”,故意违反了Map<K,V> 的约定。

这是IdentityHashMap<K,V> 类文档中的注释:

这个类不是通用的 Map 实现!虽然这个类实现了 Map 接口,但它故意违反了 Map 的一般合同,该合同要求在比较对象时使用 equals 方法。此类仅在需要引用相等语义的极少数情况下使用。

【讨论】:

  • java.lang.string 是否会因为它是最终的而中断开闭?
  • @Khanna111GauravKhanna 从技术上讲 - 是的,它打破了“O”部分。但是,String 不是 Java 集合,从安全角度来看,将其设为 final 绝对是正确的做法。
  • 是的,我错过了收集部分。
  • HashMap.put() 呢?它允许空键和值。但是一般的 Map 接口说当键或值为 null 时抛出 NullPointerException
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多