Java API中断

前端之家收集整理的这篇文章主要介绍了Java API中断前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下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破坏?

客户端的代码仍然会编译,但API javadoc定义的方法契约不再受到尊重,因为MyExcepiton被“新”条件抛出.

如果只更新了我的API jar文件,客户端应用程序仍然可以工作,但根据客户端捕获异常的方式,应用程序行为可能会发生很大变化.

你对此持何看法?

解决方法

是的,当C1没有发生时,你通过抛出异常来破坏接口的契约.

根据经验,接口契约的变形,更容易不破坏:)如果接口没有用显式C1来定义,但更一般地说,这给了更多的灵活性.

猜你在找的Java相关文章