java - `instanceof` 运算符是否违反里氏替换原则?

标签 java oop solid-principles

例如,我有 Currency 和处理 Currency 各种实现的 Exchange。我想对窗帘货币有额外的汇率,我这样做

interface Currency { double rate();}
interface Exchange { double convert(Currency currency, double money); }
class PrivateBank implements Exchange {
    @Override
    public double convert(Currency currency, double money) {
        double extra_rate = 1.0;
        if (currency instanceof CanadaDollar) { /// ?
            extra_rate = 1.05;
        }
        return money * currency.rate() * extra_rate;
    }
}

这里是否违反了LSP?

最佳答案

没有。 Liskov 替换原则是关于子类型忠实地展示其父类(super class)型的所有属性。它绝不禁止其他代码以不同方式处理同一类型的不同子类型。

您的示例代码有点臭,但不是因为与 LSP 有任何冲突。

关于java - `instanceof` 运算符是否违反里氏替换原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62602914/

相关文章:

java - Java 中 uid 的 LDAP 搜索过滤器

php - Laravel:区别 App::bind 和 App::singleton

java - 方法链接,从列表返回一个对象并从中获取值

c# - 你能让一个接口(interface)依赖于一个类吗?

domain-driven-design - DDD 存储库和工厂

java - Java 小程序的控制台 IO

java - 在转换为 Java 对象之前检查 xsd datetime 是否有定义的时区

typescript - 如果不能动态更改对象的类怎么办?

oop - 实现多个接口(interface)是否违反单一职责原则?

java - 如何查找 native java函数调用的源代码