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

San*_*ors 5 java backwards-compatibility apache-commons-lang apache-commons-lang3

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

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

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

我之所以这样问是因为,据我所知,某些向后不兼容的特性促使Apache将包从重命名为langlang3这些方法可能返回不同的结果。我认为这是一个错误的主张,对我而言,这很重要,因为我总是很高兴地用我偶然发现的所有s 替换lang,并且我只检查它仍然可以编译,而且我真的认为我是对的,但是现在,由于我被告知停止这些索赔,这是我认为是错误的,但是我没有任何信息可以用来反驳这些索赔并可以继续进行。lang3import

Mik*_*ike 10

您是否阅读了他们的迁移指南

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

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

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

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

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