使用com.google.common.hash中的哈希类安全吗?

时间:2018-10-30 09:17:32

标签: java intellij-idea hash

我偶然发现了Hashing包中的com.google.common.hash类。 如果我正在使用该类的函数,则Intellij IDEA将显示以下警告:

该类本身带有@Beta注释:

@Beta批注的描述为:

  

表示在将来的发行版中,公共API(公共类,方法或字段)可能会发生不兼容的更改,甚至删除。带有此注释的API不受其包含库所作的任何兼容性保证。请注意,此注释的存在并不暗示API的质量或性能 ...

  • 那么API的实现是稳定的吗?
  

...有问题的,仅是它不是“ API冻结”的事实。   对于应用程序来说,依靠beta API通常是安全的,但要付出一些额外的工作 ...

  • 还有哪些额外的工作?
  

...升级期间。但是,通常不建议这样做(将库包含在用户的CLASSPATH中,但不在库开发人员的控制范围之内)。

问题是使用上述类及其功能是否安全/稳定?使用Beta API时需要权衡些什么?

3 个答案:

答案 0 :(得分:1)

那么API的实现是稳定的吗?
无法通过此注释知道。
要回答这个问题,您需要知道它的使用范围和持续时间。

还有哪些额外的工作?
现在,仅需要1个参数并返回String的方法现在需要3个参数并返回List<String>时,您必须做的额外工作。
即:由于API的更改,使用此API的代码可能需要更改。

答案 1 :(得分:1)

  

那么API的实现是稳定的吗?

引用的文字表明该API “可能受到不兼容的更改” 。这意味着它(API)不稳定。

还请注意,引号中的文字明确指出,注释并未说明API的实现是否有效。

但也请注意,这不是“是/否”问题。这实际上是一个是/否/也许是问题。有些问题没有答案。

  

还有哪些额外的工作?

如果API更改,请重写一些代码。

  

问题是使用上述类及其功能是否安全/稳定?

这要求有预测未来的能力。这是无法回答的。 (除非您询问将注释添加到该API上的人员。他们也许能够做出可靠的预测...)

这也是无法回答的,因为它取决于的含义,以及您打算在其中使用Hashing类的上下文。

  

使用Beta API时需要权衡些什么?

权衡不言而喻:

  • 从好的方面来说,从长远来看,您将使用 可能对您的应用程序有益的新API功能。 (如果没有证据表明它可能是有益的,那么整个讨论就没有意义了!)

  • 在不利的一面,如果作者按自己的意愿修改API的话,您可能不得不重写某些代码。

答案 2 :(得分:1)

API的实现很好,您可以依靠它,因为它是Google广泛使用的库。

关于稳定性-您可以在此处进行一些研究,并每年比较该API的几个版本。假设23.0与27.0-jre

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

如果进行比较,则不同年份(2017年与2018年)的API完全相同。

因此,我在这里将nav { margin: 0 auto; width: 80%; display: flex; flex-direction: row; background: red; } 解释为“请注意,该API 将来可能会改变”的提示,但实际上该API既稳定又可靠并大量使用。

也许在某个时候,谷歌开发人员可能会选择删除@Beta注释。也许他们打算,或者已经忘记了(投机……)

“额外工作”是指,如果您使用此API构建应用程序,则可能需要稍微重构应用程序(假设方法签名发生了变化,或者方法被弃用并替换了),如果需要升级到此API的最新版本。

那里的工作程度取决于您使用该API的频率和频率,以及对该API的依赖程度(例如,通过其他库进行传递,例如,这些库也需要重新构建)。 >

总而言之,在这种情况下-“不要担心,请继续前进”:)