Безопасно ли использовать класс хеширования из com.google.common.hash? - PullRequest
0 голосов
/ 30 октября 2018

Я наткнулся на Hashing класс из com.google.common.hash пакета. Intellij IDEA показывает следующее предупреждение, если я использую функции этого класса:

Сам класс помечен аннотацией @Beta:

Описание @Beta аннотации гласит:

Означает, что открытый API (открытый класс, метод или поле) подвержен несовместимым изменениям или даже удалению в будущем выпуске. API, содержащий эту аннотацию, освобождается от каких-либо гарантий совместимости, которые дает содержащаяся в нем библиотека. Обратите внимание, что наличие этой аннотации ничего не говорит о качестве или производительности API ...

  • То есть реализация API в порядке и стабильна?

... под вопросом только тот факт, что он не "API-заморожен". Как правило, для приложений безопасно зависеть от бета-интерфейсов API, за счет некоторой дополнительной работы ...

  • Какой вид дополнительной работы?

... во время обновлений. Однако, как правило, нежелательно, чтобы библиотеки (которые включаются в пользовательские CLASSPATH вне контроля разработчиков библиотеки) делают это.

Вопрос в том, безопасно ли / стабильно ли использовать упомянутый класс и его функциональность? Какой компромисс при использовании бета-версии API?

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

То есть реализация API в порядке и стабильна?

В цитируемом тексте говорится, что API «подвержен несовместимым изменениям» . Это означает, что он (API) не стабилен.

Обратите внимание, что в цитируемом тексте прямо говорится, что в аннотации ничего не говорится о том, работает ли реализация API.

Но также обратите внимание, что это не проблема да / нет. На самом деле это проблема да / нет / возможно. На некоторые вопросы нет ответов.

Какой вид дополнительной работы?

Переписать часть вашего кода ... если API изменится.

Вопрос в том, безопасно ли / стабильно ли использовать упомянутый класс и его функциональность?

Для этого требуется умение предсказывать будущее. Это не подлежит ответу. (Если вы не спросите людей, которые размещают эту аннотацию в этом API. Они могут сделать надежный прогноз ...)

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

Какой компромисс при использовании бета-API?

Компромисс очевиден:

  • С другой стороны, вы можете использовать новые функции API, которые могут быть полезными для вашего приложения в долгосрочной перспективе. (А если нет никаких доказательств того, что это может быть полезно, все это обсуждение спорно!)

  • С минусовой стороны, может придется переписать часть вашего кода, если авторы изменят API ... как они говорят, что может сделать.

0 голосов
/ 30 октября 2018

Реализация API в порядке, вы можете положиться на это, так как это широко используемая библиотека от Google.

Что касается стабильности - вы можете провести небольшое исследование здесь и сравнить несколько версий этого API в год. Скажем, 23,0 против 27,0-й

https://google.github.io/guava/releases/23.0/api/docs/com/google/common/hash/Hashing.html

https://google.github.io/guava/releases/27.0-jre/api/docs/com/google/common/hash/Hashing.html

Если вы выполняете различие, API разных лет (2017 и 2018) будут одинаковыми.

Поэтому я бы интерпретировал @Beta здесь как предупреждение, что «имейте в виду, что этот API может измениться в будущем», но на практике API является стабильным, надежным и интенсивно используемым .

Возможно, в какой-то момент разработчики Google могут удалить аннотацию @Beta. Или, может быть, они намерены или забыли (умозрительные ...)

Упомянутая «дополнительная работа» означает, что, если вы создаете приложение с использованием этого API, вам может потребоваться немного реорганизовать ваше приложение (представьте, что сигнатура метода изменяется, или метод становится устаревшим и заменяется), если вам нужно обновить до последней версии этого API.

Степень работы там зависит от того, насколько интенсивно и как часто вы используете API, и насколько глубока зависимость от этого API (транзитивно, например, через другие библиотеки - их также необходимо перестроить).

В итоге, в данном случае - "Не волнуйся, двигайся":)

0 голосов
/ 30 октября 2018

То есть реализация API в порядке и стабильна?
Нет способа узнать из этой аннотации.
Чтобы ответить на это, вам нужно знать, как широко он используется и как долго.

Какой вид дополнительной работы?
Вид дополнительной работы, которую вы должны выполнять, когда метод, который требует только 1 параметр и возвращает String, теперь требует 3 параметра и возвращает List<String>.
т.е. код, использующий этот API, может нуждаться в изменении из-за изменения API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...