Guava:Java 工程师的常备工具箱
Guava:Java 工程师的常备工具箱
Guava 在 GitHub 上已经积累了 51.5K Star。
Google 开源这套 Java 核心库,本来是给自己内部项目用的,后来开放给所有人。它解决的是 Java 标准库够不到的那一层问题:集合类型不够用、并发工具太薄、字符串处理写起来啰嗦。写 Java 的人多少都遇到过这些磕绊。

1、 这玩意儿是干嘛的
一句话:给 Java 标准库打补丁。
JDK 自带的集合就那几种,想用个双向映射、带重复元素的集合、或者图结构,得自己撸。Guava 直接把这些常用又缺的东西做成了现成类:Multimap、Multiset、BiMap、Graph,拿来即用。还有不可变集合、缓存、哈希工具、字符串连接器、事件总线,全是日常工程里高频出现但 JDK 没现成方案的环节。

2、 为什么值得装
写 Java 的人多半有过这种体验:一个 Map<K, List<V>> 写下来,取值要判空、初始化、再 add,三步代码做一件事。换成 Multimap,一行 multimap.put(key, value) 就完事。再比如 Strings.isNullOrEmpty、Joiner、Splitter,比 JDK 自带的 String.split 行为稳定得多,不会让你踩正则的坑。
并发表里 ConcurrentHashMap 够用但不够顺手。Guava 的 LoadingCache 把过期、刷新、统计都封装好了,写本地缓存基本不用再自己造轮子。ListenableFuture 在 CompletableFuture 出现之前是异步编程的主力,现在依然有不少老项目在用。
3、 两个版本要分清
Guava 发布分 JRE 和 Android 两个 flavor。JRE 版要 JDK 1.8 以上,功能最全;Android 版做了裁剪,能在 API level 23 那种老设备上跑。Maven 坐标里的版本号会标出来:33.6.0-jre 或 33.6.0-android,引依赖的时候别引错。
Maven 引法:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.6.0-jre</version>
</dependency>
Gradle:
implementation("com.google.guava:guava:33.6.0-jre")
4、 用之前要知道的坑
README 里写得挺直白,挑几条关键的:
标了 @Beta 注解的 API 随时会改、随时会删。如果你的代码会被别人当依赖引用,别用 @Beta 接口,否则下游升级时容易炸。Google 还专门做了个 guava-beta-checker 工具帮库作者扫这个。
没标 @Beta 的 API 承诺长期二进制兼容,连 @Deprecated 的都留着不动。这点对老项目很友好,升级版本不至于大面积改代码。
所有对象的序列化格式不保证稳定,别把 Guava 对象持久化到磁盘再指望后续版本能读回来。
Guava 自己有个运行时依赖 failureaccess:1.0.3,引 Guava 会自动带进来,做依赖收敛时记得留它。
5、 适合谁用
写 Java 后端、天天跟集合和并发打交道的开发者,装上顺手就能少写一堆样板代码。
做 Android 应用、SDK 体积敏感的项目,挑 Android flavor,按需挑不挑 @Beta 都要先看一眼。
维护老的 JDK 1.8 项目、又想用现代工具的,Guava 是少有的能一直跟到老的平台库。
新手入门想系统性了解,看官方的 Guava Explained 文档,比网上的二手博客靠谱很多。
能一直跟到老的平台库。
新手入门想系统性了解,看官方的 Guava Explained 文档,比网上的二手博客靠谱很多。
更多推荐

所有评论(0)