我修改了一个 Java 库,将一些方法的返回类型从原始类型更改为等效类(例如从 int 到 Integer,从 float 到 Float)。库中没有其他更改。
在正常使用中,更改不应改变库行为,因为 Java 会自动取消装箱这些值。否则,如果返回值为 null,JVM 将抛出异常(当前库在解析阶段为错误抛出异常)。
鉴于当前版本是 1.0.1,我应该将新库发布为 1.1.0 还是 2.0.0?
我修改了一个 Java 库,将一些方法的返回类型从原始类型更改为等效类(例如从 int 到 Integer,从 float 到 Float)。库中没有其他更改。
在正常使用中,更改不应改变库行为,因为 Java 会自动取消装箱这些值。否则,如果返回值为 null,JVM 将抛出异常(当前库在解析阶段为错误抛出异常)。
鉴于当前版本是 1.0.1,我应该将新库发布为 1.1.0 还是 2.0.0?
摘自Practical API Design - Confessions of a Java Framework Architect 一书。
如果一个方法声称在一个版本中返回一个非空值,那么将其更改为返回
null
实际上是一种不兼容的更改,因为这种更改可以从外部观察到并且对组件的用户产生负面影响。
在《企业软件架构和设计实体、服务和资源》一书中以另一种方式:
通常,版本标识符包括主要和次要版本号,期望次要版本更新与具有相同主要版本号的早期版本向后兼容。
原则上,在后续版本中,当功能发生重大跳跃时,主要编号增加,仅添加次要功能或重大修复时增加次要编号,修复次要错误时增加修订号。