我有两个已检查的异常:TestException1
和 TestException2
以及以下代码:
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
子类异常。实际上,由于 p3
由 p2
调用并由 p1
间接调用,因此您实际上需要更改更多类才能使其编译。这可能会使 API 更改的范围更大。
所以对于你的问题:
Do checked exceptions violate the open closed principle?
不完全是。
可以在不违反开闭原则的情况下使用检查异常。但是,给一个已经被“卡住”的API方法添加checked exception,确实违反了1原则。但添加异常的行为是违规的……不是异常本身,也不是一般的已检查异常。
1 - 即使这是值得商榷的。反对意见是修复设计缺陷和错误并不违反开放封闭原则。
关于java - 检查异常是否违反开闭原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882275/