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, на которые натыкаюсь, и я только проверяю, компилируется ли он, и я действительно думаю, что я прав, но теперь, из-за этих заявлений мне сказали остановиться, что я считаю неправильным, но у меня нет информации, которую я мог бы использовать, чтобы опровергнуть эти заявления и разрешить продолжить.


person SantiBailors    schedule 09.07.2019    source источник
comment
Если вы знаете, какие функции вы используете, вы можете легко протестировать эти функции, если существуют какие-либо исправления ошибок, то протестируйте их (это просто идея).   -  person Alpesh Jikadra    schedule 11.07.2019
comment
@AlpeshJikadra Я не знаю всех функций Commons Lang, которые использует эта огромная база кода, я хочу иметь возможность просто обновить import с lang до lang3 и только перекомпилировать. Если какое-то поведение изменяется из-за исправления ошибки или появления новой ошибки, это совершенно нормально (и маловероятно), поэтому в основном я пытаюсь понять, был ли процесс разработки lang3 направлен на то, чтобы не изменять существующее поведение.   -  person SantiBailors    schedule 11.07.2019
comment
Так что лучше всего будет список обнаруженных различий. Вы можете провести инвентаризацию используемых методов, модульных тестов или близкое сравнение исходного кода; все это осуществимо. Кроме того, некоторые варианты использования могут устареть, что соответствует стандарту java SE.   -  person Joop Eggen    schedule 11.07.2019
comment
@JoopEggen Они возможны, но это займет достаточно времени, поэтому обновление до версии 3 не стоит того. Я согласен, что это был бы самый безопасный курс действий, хотя.   -  person SantiBailors    schedule 11.07.2019


Ответы (1)


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

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

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

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

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

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

person Mike    schedule 11.07.2019
comment
Я прочитал это руководство по миграции, но не до конца, где эта заметка, моя беда. Это примечание — единственное, что имеет значение для моего вопроса, и оно прекрасно закрывает тему. Я ошибался, и эти утверждения были правильными. Удаленные классы и методы и все остальное, что может привести к сбою компиляции, не было теми изменениями, о которых я спрашивал. Я спрашивал именно о типе изменений в вашей цитате. Кроме того, если я внимательно присмотрюсь к ним, я полностью расцениваю их как исправления ошибок (рассматривание пустой строки как числового значения для меня является ошибкой), но я вижу, как это может быть вопросом интерпретации. - person SantiBailors; 11.07.2019