我的代码使用Apache Commons Lang v.2(commons-lang
)。如果我更新代码以使用v.3(commons-lang3
),我应该担心我的代码可能会开始表现出不同的行为(当然,除了由于固定错误和可能存在的新错误而导致的差异,这是正常现象,不算)?
换句话说,lang3
是否可以使用同样在lang
中(具有完全相同的签名)但在两个版本中可能返回不同结果的方法?
Apache确实非常清楚地提到了向后不兼容,但是我始终理解这些不兼容的含义是破坏编译,而不是完全相同的方法可以返回不同的结果。
我之所以这样问,是因为据我所知,一些向后的不兼容性促使Apache将包从lang
重命名为lang3
,这些方法可能返回不同的结果。
我认为这是一个错误的主张,对我而言,这很重要,因为在遇到的所有lang
中,我总是很乐意将lang3
替换为import
,而我只检查它仍然可以编译,并且我真的认为我是对的,但是现在,由于这些主张,我被告知停止,这是错误的,但我没有可用来反驳这些主张并被允许继续的信息。
答案 0 :(得分:10)
您读过他们的migration guide吗?
它说,尽管v3上有向后不兼容的标记,但是大多数升级很简单,就像更新导入以使用lang3
代替lang
一样。
已删除了一些类和方法,任何IDE和编译器都可以为您快速识别这些类和方法。
我认为更危险的领域是方法的行为和契约发生了变化。例如,请参阅以下注释:
StringUtils.isAlpha,isNumeric和isAlphanumeric现在在传递空字符串时都返回false。以前,它们返回true。
如果您的代码正在使用这些方法,则可能会看到不同的行为。您可以自行决定代码是否使用它们,如果需要,可以使用。