Java 错误的接口实现是否违反了Liskov替换原则? 让我们考虑下面的接口实现: Comparator<String> stringComparator = (o1, o2) -> 0;

Java 错误的接口实现是否违反了Liskov替换原则? 让我们考虑下面的接口实现: Comparator<String> stringComparator = (o1, o2) -> 0;,java,interface,liskov-substitution-principle,Java,Interface,Liskov Substitution Principle,它是否违反了Liskov替换原则?在本例中,没有。您的示例比较器只是说所有字符串都是相等的。这满足了比较器的合同,更广泛地说,它满足了Liskov可替代性原则LSP 这个比较器没有用处,很可能是一个错误/bug,但没有违反LSP 在更一般的情况下,不满足比较器契约的比较器实现在技术上违反了LSP。但你也可以说它坏了。你修复它主要是因为它坏了/不能正常工作。。。不是因为一些设计原则 更一般地说,并非所有违反LSP的示例都是坏代码。一个例子是IdentityHashMap,它在测试密钥是否相同时,故

它是否违反了Liskov替换原则?

在本例中,没有。您的示例比较器只是说所有字符串都是相等的。这满足了比较器的合同,更广泛地说,它满足了Liskov可替代性原则LSP

这个比较器没有用处,很可能是一个错误/bug,但没有违反LSP

在更一般的情况下,不满足比较器契约的比较器实现在技术上违反了LSP。但你也可以说它坏了。你修复它主要是因为它坏了/不能正常工作。。。不是因为一些设计原则

更一般地说,并非所有违反LSP的示例都是坏代码。一个例子是IdentityHashMap,它在测试密钥是否相同时,故意使用equals来违反Map的约定。它使用==代替。正确,考虑到课程的目的

LSP违规可能导致意外行为,但并非所有意外都是bug


1-我想不出使用这个比较器是明智的。不是树地图。未排序…

此比较器实现完全有效的总顺序

只要检查一下公理:


对于所有a,b:如果a不正确的实现与Liskov替换原则有什么关系?该实现没有任何错误。