次の API があります。
public interface MyApi {
/**
* Performs some stuff.
* @throws MyException if condition C1
*/
public void method() throws MyException;
}
現在、API 実装で次の変更を行っています。
public class MyApiImpl {
public void method() throws MyException {
if (C1) {
throw new MyException("c1 message");
}
...
}
}
は次のように置き換えられます:
public class MyApiImpl {
public void method() throws MyException {
if (C1) {
throw new MyException("c1 message");
} else if (c2) {
throw new MyException("c2 message");
}
...
}
}
これを API の破損と見なしますか?
クライアントのコードは引き続きコンパイルされますが、MyExcepiton が「新しい」条件によってスローされるため、API javadoc によって定義されたメソッド コントラクトは尊重されなくなります。
API jar ファイルのみが更新された場合、クライアント アプリケーションは引き続き動作しますが、クライアントが例外をキャッチする方法によっては、アプリケーションの動作が大きく変わる可能性があります。
それについてあなたの見解は何ですか?