java - 检查异常是否违反开闭原则?

标签 java oop software-design open-closed-principle

我有两个已检查的异常:TestException1TestException2 以及以下代码:

void p1() throws TestException1{
    p2();
}

void p2() throws TestException1 { 
    p3();
}

void p3() throws TestException1 {}

p3的签名编辑如下是否违反了Open-Closed原则?

void p3() throws TestException1, TestException2 {}

最佳答案

我想我现在明白你的问题的意思了。 (第二次尝试)

严格来说,你对一个类的源代码所做的任何改变都违反了开放封闭原则的“封闭”部分。违规的严重程度取决于变更的性质。

在您的示例中,更改 Java 中公共(public) API 方法抛出的已检查异常是重大违规行为。如果不重新编译,很容易导致任何使用 methods ... 的方法出现编译错误或二进制兼容性问题导致的 Error 子类异常。实际上,由于 p3p2 调用并由 p1 间接调用,因此您实际上需要更改更多类才能使其编译。这可能会使 API 更改的范围更大。

所以对于你的问题:

Do checked exceptions violate the open closed principle?

不完全是。

可以在不违反开闭原则的情况下使用检查异常。但是,给一个已经被“卡住”的API方法添加checked exception,确实违反了1原则。但添加异常的行为是违规的……不是异常本身,也不是一般的已检查异常。


1 - 即使这是值得商榷的。反对意见是修复设计缺陷和错误并不违反开放封闭原则。

关于java - 检查异常是否违反开闭原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882275/

相关文章:

java - 抽屉菜单未显示在 ViewPager + ActionBar.Listener 中

python - 将参数传递给基类构造函数或使用实例变量?

mysql - 检查记录是否已存在

java - 实例化新对象与实现 reset() 方法

spring - 如何设计一个可以每秒处理1k请求的spring boot应用程序

java - foreach 变量名等于字段名

java - 检查单词的最后一个字母时 StringIndexOutOfBoundsException -1

java - Graphite 烯抽象 - 断言的最佳实践

php - 为什么变量应该有 public 或 private 或 protect 但函数不应该在类中

oop - 覆盖参数类型?