我偶然发现了Hashing
包中的com.google.common.hash
类。
如果我正在使用该类的函数,则Intellij IDEA将显示以下警告:
该类本身带有@Beta
注释:
@Beta
批注的描述为:
表示在将来的发行版中,公共API(公共类,方法或字段)可能会发生不兼容的更改,甚至删除。带有此注释的API不受其包含库所作的任何兼容性保证。请注意,此注释的存在并不暗示API的质量或性能 ...
...有问题的,仅是它不是“ API冻结”的事实。 对于应用程序来说,依靠beta API通常是安全的,但要付出一些额外的工作 ...
...升级期间。但是,通常不建议这样做(将库包含在用户的CLASSPATH中,但不在库开发人员的控制范围之内)。
问题是使用上述类及其功能是否安全/稳定?使用Beta API时需要权衡些什么?
答案 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的依赖程度(例如,通过其他库进行传递,例如,这些库也需要重新构建)。 >
总而言之,在这种情况下-“不要担心,请继续前进”:)