Apache Commons Lang:“ lang”和“ lang3”之间的“不兼容性”会导致不同的运行时结果吗?

时间:2019-07-09 13:19:54

标签: java backwards-compatibility apache-commons-lang apache-commons-lang3

我的代码使用Apache Commons Lang v.2(commons-lang)。如果我更新代码以使用v.3(commons-lang3),我应该担心我的代码可能会开始表现出不同的行为(当然,除了由于固定错误和可能存在的新错误而导致的差异,这是正常现象,不算)?

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

Apache确实非常清楚地提到了向后不兼容,但是我始终理解这些不兼容的含义是破坏编译,而不是完全相同的方法可以返回不同的结果。

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

1 个答案:

答案 0 :(得分:10)

您读过他们的migration guide吗?

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

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

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

  

StringUtils.isAlpha,isNumeric和isAlphanumeric现在在传递空字符串时都返回false。以前,它们返回true。

如果您的代码正在使用这些方法,则可能会看到不同的行为。您可以自行决定代码是否使用它们,如果需要,可以使用。