有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

向枚举添加值时使用java Semver

我们将语义版本控制(http://semver.org/)引入Java库

我们应该如何处理添加新枚举值的问题?我们的情况如下:

  • annotations.jar包含具有类型MyEnum属性的注释
  • util.jar使用注释自annotations.jar对对象进行注释
  • wsprovider.jar使用类似jaxb的技术将util.jar中的注释对象序列化到web api中
  • wsconsumer.jar使用wsprovider.jar提供的web api,并基于MyEnum的值进行切换以更改其行为

如果我们给MyEnum添加一个新值,我们应该碰撞各种罐子的哪些部分(主要/次要/补丁)

在我看来util.jar需要升级主要版本,因为API的更改方式可能会破坏现有代码

按照同样的逻辑,这将波及到wsprovider.jarwsconsumer.jar中的一个主要凸起

annotations.jar是否需要一个主要版本

我会说是,因为枚举是一组封闭的值,所以代码(比如wsconsumer.jar)假设通过覆盖枚举中的所有值,它覆盖了所有可能的行为。向枚举中添加一个新值,则会中断该操作

然而,从本能上看,向枚举中添加一个值似乎有点过分,而且会产生相当大的连锁反应

我想这只是我们需要习惯塞姆弗的事情


共 (1) 个答案

  1. # 1 楼答案

    在您的例子中,添加新功能(如添加新的枚举常量)很少会破坏公共API的向后兼容性。我认为,它可能对公共API造成的最大危害是使其他一些枚举常量被弃用,这只会导致SemVer中指定的小版本升级(常见问题解答:我应该如何处理弃用功能?)。因此,您可能需要重新考虑添加新的enum常量是否真的会破坏现有代码,因为我不知道它是如何做到的

    关于您的依赖关系,您可能会感兴趣的另一个常见问题是:如果在不更改公共API的情况下更新自己的依赖关系,我应该怎么做

    需要记住的一点是,增加主版本主要是为了打破公共API的向后兼容性,之后通常会更改现有代码,而不是添加新代码。另一件需要记住的事情是,每个依赖项都有自己的公共API