考虑一个定义类A的库,有几个方法(A1,A2,...),版本1.0.0(语义版本控制)
现在想象一下我向A对象添加一个新方法(方法Ab)。这是次要的发布吗?因为它增加了功能,它不应该是一个突破性的变化。 但是如果使用该库的人声明了一个扩展了B类的A类,并且B定义了一个方法Ab,其方法与新方法相同,那么现在代码不会被编译,因为它需要覆盖声明(在Scala和Java中)。
那么,这是一个重大改变吗?
答案 0 :(得分:3)
首先,将一个公共方法添加到一般类中并不是语义版本控制的重大变化。然而,删除公共方法将是一个明显的重大变化。
如果您提供了一个Java库并且添加方法interface
,那么 是一个重大变化,因为其他人必须更改/扩展他们的码。
如果将公共方法添加到class
,这只会是一个问题,如果此类不是最终,那么其他人可以扩展它和覆盖方法。
所以我认为最好的方法是将class
声明为final,因此方法覆盖的问题永远不会发生。您也可以保留主要更新,只增加次要更新。向接口添加方法将是一个重大变化,所以你应该增加主要版本。