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

我的代码使用apache commons lang v.2(commons-lang)。如果我更新我的代码以使用v.3(commons-lang3),我是否应该担心我的代码可能会开始有不同的行为(当然,除了由于修复的错误和可能的新错误而产生的差异,这是正常的,不算)?
换句话说,“lang3”的方法也在lang(具有完全相同的签名),但是这两个版本可能会返回不同的结果吗?
Apache确实提到了向后的不兼容性,并且非常清楚,但是我总是理解这些不兼容的意义,即它们中断编译,而不是在相同的方法返回不同结果的意义上。
我这么问是因为有人告诉我,促使apache将包从lang重命名为lang3的一些向后不兼容是可能返回不同结果的方法。
我相信这是一个错误的声明,对我来说这很重要,因为我总是很高兴地在我偶然发现的所有lang中用lang3替换import,我只检查它是否仍在编译,我真的认为我是对的,但是现在,由于这些声明,我被告知要停止,我认为这是错误的,但我没有信息可以用来反驳那些并被允许继续。

最佳答案

你读过他们的migration guide
它说,尽管v3上有向后不兼容标记,但大多数升级都很简单,只需更新导入以使用lang3代替lang
有些类和方法已被删除,任何IDE和编译器都会很快为您标识这些类和方法。
我认为更危险的领域是行为和方法契约发生变化的地方。例如,请参见以下注释:
当传递空字符串时,stringutils.isalpha、isnumeric和isalphanumeric现在都返回false。以前他们都是真的。
如果您的代码正在使用这些方法,您可能会看到不同的行为。这将取决于你的代码是否使用它们,如果是,如果你在乎。

本文翻译自 https://stackoverflow.com/questions/56953572/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

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


相关文章:

java - 将Java程序的输出分配为bash shell变量

java - 仅将我要添加的最终数组列表克隆到2维ArrayList的所有元素。

c++ - 扩展类并保持二进制向后兼容性

c# - 包含具有向后兼容性的泛型的类的序列化

java - 如何使用ToStringBuilder排除单个变量

java - 哈希码和等于实现

java - 使用Java keytool import指定密钥库名称和别名的意义是什么?

java - 什么时候在ExecutorService中收集可运行的对象垃圾?

ios - 编写支持iOS 3.1.3和iOS 4.x的iOS应用程序时的陷阱

java - Commons AnnotationUtils是否像库一样? (JAVA)