📌 项目地址google/guava | ⭐ 51,592 颗星 | 🔧 Java | 📜 未标注

它是什么?为什么值得关注?

Guava 是 Google 开源的 Java 核心库,官方描述只有一句话:Google core libraries for Java。但这句话背后是一整套经过 Google 内部海量项目验证的基础设施——新的集合类型(如 Multimap、Multiset)、不可变集合、图库、并发工具、I/O、哈希、原始类型和字符串处理等。

它不解决某个特定业务问题,而是让 Java 开发变得更顺手。如果你写 Java,大概率已经间接在用 Guava——很多框架和库都依赖它。项目 51.5k Star,在 Google 内部几乎所有 Java 项目都在用,也被大量外部公司采用。

一分钟上手:加依赖就能用

Guava 的 Maven 坐标是 com.google.guava:guava。官方提供两个 flavor:JRE 版和 Android 版,通过版本号区分。

Maven 依赖:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>33.6.0-jre</version>
  <!-- 或 Android 版:33.6.0-android -->
</dependency>

Gradle 依赖:

dependencies {
  // 仅在实现中使用
  implementation("com.google.guava:guava:33.6.0-jre")

  // 若你的公开 API 暴露了 Guava 类型,用 api
  api("com.google.guava:guava:33.6.0-jre")

  // Android 版同理
  implementation("com.google.guava:guava:33.6.0-android")
}

具体什么时候用 api、什么时候用 implementation,参考 Gradle 官方文档中关于 API 和实现分离的说明。

核心亮点:官方 README 中明确提到的能力

Guava 的内容很多,但 README 给出了最值得关注的部分:

  • 新集合类型multimap(一个键对应多个值)、multiset(允许重复元素的集合)等,填补了 JDK 集合框架的空白。
  • 不可变集合:提供真正不可变的 ImmutableListImmutableSet 等,比 Collections.unmodifiableList 更安全、性能更好。
  • 图库:一套通用的图(Graph)数据结构实现,支持有向/无向、加权等。
  • 并发工具:比如更简单的异步回调、原子值增强、限流器等。
  • I/O、哈希、原始类型、字符串工具:文件读写、API 友好的哈希函数、基本类型操作、字符串处理等。

这些不是口号,而是你在 guava.dev/api 能看到的具体类。例如直接在浏览器打开 guava.dev/ImmutableList 就能跳到对应的 Javadoc。

两个版本:JRE 和 Android,怎么选

Guava 打包成两种 flavor,用版本号区分:

  • 33.6.0-jre:要求 JDK 1.8 或更高,用于标准 JRE 环境。
  • 33.6.0-android:用于 Android 平台,或任何需要兼容 Android 的库。

如果你的库希望同时兼容 Android 和 JRE,官方建议用 Android flavor。具体说明见 Android 文档

官方文档和快照

  • 完整用户指南:Guava Explained
  • Javadoc:打开 guava.dev/api 即可浏览;在域名后直接加类名可快速定位,如 guava.dev/ImmutableList
  • 想要尝鲜?master 分支的每日快照通过 Maven 发布,JRE 版为 999.0.0-HEAD-jre-SNAPSHOT,Android 版为 999.0.0-HEAD-android-SNAPSHOT,同时提供快照 Javadoc 和 API diff。

什么时候不适合用 Guava

Guava 本身是个庞大的库,如果你只是偶尔需要一两个工具方法,引入它会增加依赖体积。Android 开发者尤其要注意:虽然官方提供 Android flavor,但 Guava 的类库和方法数相当多,对方法数敏感的项目需谨慎权衡。不过对于那些几乎任何 Java 项目都会使用的基础工具,Guava 可能是投入产出比最高的选择。

总结

Guava 是一个”基础设施级”的库,它不制造炫技奇观,而是解决 Java 标准库长期以来的痛点:缺少不可变集合、缺少多值 Map、并发工具不够丰富等。用一句大白话总结:如果你写 Java,迟早要碰到它,不如现在试试。

这篇文章对你有帮助吗?

发表回复