Apache Commons Lang:'lang' 和 'lang3' 之间的 "incompatibilities" 会导致不同的运行时结果吗?

Apache Commons Lang: Can the "incompatibilities" between 'lang' and 'lang3' cause different runtime results?

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

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

Apache 确实提到了向后不兼容,而且非常清楚,但我始终理解这些不兼容是因为它们破坏了编译,而不是从完全相同的方法可以 return 不同结果的意义上。

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

你读过他们的 migration guide 了吗?

它说尽管 v3 上有向后不兼容标签,但大多数升级都像更新导入一样简单,以使用 lang3 代替 lang

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

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

StringUtils.isAlpha, isNumeric and isAlphanumeric now all return false when passed an empty String. Previously they returned true.

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