5

我的代码使用 Apache Commons Lang v.2 ( commons-lang)。如果我更新我的代码以使用 v.3 ( commons-lang3) 代替,我是否应该担心我的代码可能会开始表现不同(当然,由于已修复的错误和可能的新错误导致的差异除外,这是正常的,不算数) ?

换句话说,是否可以lang3拥有也在lang(具有完全相同的签名)但可能在两个版本中返回不同结果的方法?

Apache 确实提到了向后不兼容,而且非常清楚,但我总是从它们破坏编译的意义上理解这些不兼容,而不是从同一种方法可以返回不同结果的意义上理解。

我之所以这样问,是因为有人向我声称,促使 Apache 将包重命名为 to 的一些向后不兼容是lang可能lang3返回不同结果的方法。我相信这是一个错误的主张,对我来说这很重要,因为我总是很乐意用我偶然发现的所有 s 替换langlang3import只检查它是否仍然可以编译,我真的认为我是对的,但是现在,由于这些说法,我被告知停止,我认为这是错误的,但我没有任何信息可以用来反驳这些说法并被允许继续。

4

1 回答 1

10

你读过他们的迁移指南吗?

它说,尽管 v3 上有向后不兼容的标签,但大多数升级就像更新导入以lang3代替lang.

删除了一些类和方法,任何 IDE 和编译器都会快速为您识别。

我认为更危险的领域是方法的行为和契约发生了变化。例如,请参阅此注释:

StringUtils.isAlpha、isNumeric 和 isAlphanumeric 现在在传递空字符串时都返回 false。以前他们返回真。

如果您的代码使用这些方法,您可能会看到不同的行为。由您决定您的代码是否使用它们,如果是,您是否在乎。

于 2019-07-11T13:46:30.237 回答