栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Collections.unmodifiableXXX方法是否违反LSP?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Collections.unmodifiableXXX方法是否违反LSP?

LSP表示每个子类都必须遵守与超类相同的合同。是否

Collections.unmodifiableXXX()
如此,取决于合同的阅读方式。

Collections.unmodifiableXXX()
如果尝试调用任何修改方法,则由返回的对象将引发异常。例如,如果
add()
被调用,
UnsupportedOperationException
将抛出。

什么是总合同

add()
?根据API文档,它是:

确保此集合包含指定的元素(可选操作)。如果此集合由于调用而更改,则返回true。(如果此集合不允许重复并且已经包含指定的元素,则返回false。)

如果这是一份完整的合同,那么无法修改的变体确实不能在所有可以使用收藏的地方使用。但是,该规范仍在继续,并指出:

如果某个集合由于已经包含该元素以外的其他原因拒绝添加该元素,则它必须引发一个异常(而不是返回false)。这保留了不变,即在此调用返回之后,集合始终包含指定的元素。

这明确允许实现具有不将参数添加

add
到集合中但导致异常的代码。当然,这包括托收客户有义务考虑到(合法)可能性。

因此,行为子类型(或LSP)仍然可以满足。但这表明,如果计划在子类中具有不同的行为,则还必须在顶级类的规范中预见到这种行为。

好的,顺便问一下。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430855.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号