Apache Commons Lang: могут ли «несовместимости» между «lang» и «lang3» вызывать разные результаты во время выполнения? - PullRequest
5 голосов
/ 09 июля 2019

Мой код использует Apache Commons Lang v.2 (commons-lang). Если я обновлю свой код, чтобы вместо него использовать v.3 (commons-lang3), я должен беспокоиться о том, что мой код может начать работать по-другому (конечно, за исключением различий из-за исправленных ошибок и возможных новых ошибок, что было бы нормально и не т считать)?

Другими словами, могут ли lang3 иметь методы, которые были также в lang (с точно такой же сигнатурой), но которые могли бы возвращать разные результаты в двух версиях?

Apache действительно упоминает обратные несовместимости, и очень ясно, но я всегда понимал эти несовместимости в том смысле, что они нарушают компиляцию, а не в том смысле, что один и тот же метод может возвращать разные результаты.

Я спрашиваю об этом, потому что мне было заявлено, что некоторые из обратных несовместимостей, которые побудили Apache переименовать пакет с lang на lang3, являются методами, которые могут возвращать разные результаты. Я считаю, что это неправильное утверждение, и для меня это важно, потому что я всегда с радостью заменяю lang на lang3 во всех import s, на которые я наткнулся, и я только проверяю, что он все еще компилируется, и я действительно думаю, что я справа, но теперь, из-за этих претензий, мне сказали прекратить, что я считаю неправильным, но у меня нет информации, которую я могу использовать, чтобы противостоять этим претензиям и получить разрешение на продолжение.

1 Ответ

10 голосов
/ 11 июля 2019

Вы прочитали их руководство по миграции ?

В нем говорится, что, несмотря на тег обратной несовместимости в v3, большинство обновлений так же просто, как обновление импорта, чтобы использовать lang3 вместо lang.

Есть некоторые классы и методы, которые были удалены, и любой IDE и компилятор быстро идентифицируют их для вас.

Я думаю, что более опасные области - это то, где изменилось поведение и контракты методов. Например, см. Это примечание:

StringUtils.isAlpha, isNumeric и isAlphanumeric теперь все возвращают false, когда передается пустая строка. Ранее они вернули истину.

Если ваш код использует эти методы, вы можете увидеть другое поведение. Вам решать, использует ли ваш код их, и если да, то если вы заботитесь.

...