Google Guava工具类机制

Google Guava 是一套由 Google 开发的高性能、高质量 Java 工具类库,旨在简化 Java 开发中的常见任务 ,提升代码可读性、健壮性和性能。它不仅仅是一个"工具箱",更是一套经过生产验证的最佳实践集合


🧰 Guava 核心能力概览(6大模块)

模块类别 解决什么问题 代表类/接口 最简示例
基础工具(Basic Utilities) 简化 null 判断、前置条件、对象工具等 Preconditions, Objects, MoreObjects Preconditions.checkNotNull(obj)
集合扩展(Collections) 提供更强大、更安全、更高效的集合类型 ImmutableList, Multimap, BiMap, Table ImmutableList.of("a", "b")
缓存(Caching) 本地内存缓存(LRU、自动加载、过期策略) Cache, LoadingCache CacheBuilder.newBuilder().maximumSize(100).build()
并发工具(Concurrency) 简化 ListenableFuture、Service 管理 ListenableFuture, Service Futures.addCallback(future, callback, executor)
字符串处理(Strings) 安全拼接、空值处理、拆分、填充等 Strings, Joiner, Splitter Joiner.on(",").join("a", "b")"a,b"
I/O 工具(I/O) 读写文件、流处理更简洁可靠 Files, ByteSource, CharSink Files.readLines(file, UTF_8)

1️⃣ 基础工具(Basic Utilities)

✅ 作用

  • 避免 NullPointerException
  • 标准化参数校验、对象 hashCode/toString/equals

📌 示例

java 复制代码
// 参数校验
public void setName(String name) {
    this.name = Preconditions.checkNotNull(name, "name 不能为 null");
}

// 安全的 toString
@Override
public String toString() {
    return MoreObjects.toStringHelper(this)
        .add("id", id)
        .add("name", name)
        .toString();
}

2️⃣ 集合扩展(Collections)

Guava 提供了不可变集合新型集合抽象,避免意外修改、提升性能。

类型 用途 示例
ImmutableList/Set/Map 创建不可变集合(线程安全) ImmutableList.of(1, 2, 3)
Multimap 一个 key 对应多个 value multimap.put("a", 1); multimap.put("a", 2);
BiMap 双向映射(key ↔ value 唯一) biMap.inverse().get(value)
Table<R, C, V> 二维表结构(行×列→值) table.put(row, col, value)

📌 示例

java 复制代码
// 不可变列表(推荐替代 Arrays.asList)
List<String> safeList = ImmutableList.of("x", "y");

// 一个key多个值
Multimap<String, Integer> scores = ArrayListMultimap.create();
scores.put("数学", 90);
scores.put("数学", 85);
System.out.println(scores.get("数学")); // [90, 85]

3️⃣ 缓存(Caching)

替代手写 ConcurrentHashMap + 手动过期,提供自动加载、大小限制、过期策略

📌 示例

java 复制代码
LoadingCache<String, User> userCache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .build(new CacheLoader<String, User>() {
        public User load(String userId) {
            return loadUserFromDB(userId); // 自动加载
        }
    });

User user = userCache.get("123"); // 若不存在,自动调用 load()

4️⃣ 并发工具(Concurrency)

简化异步编程,特别是 ListenableFuture(带回调的 Future)。

📌 示例

java 复制代码
ListenableFuture<String> future = executor.submit(() -> "Hello");

Futures.addCallback(future, new FutureCallback<String>() {
    @Override
    public void onSuccess(String result) {
        System.out.println("结果: " + result);
    }
    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

⚠️ 注:Java 8+ 中 CompletableFuture 更常用,但 Guava 的 ListenableFuture 在旧项目或特定生态(如 gRPC)中仍有价值。


5️⃣ 字符串处理(Strings)

避免 StringUtils 依赖,安全处理 null 和空字符串。

📌 示例

java 复制代码
// 拼接(自动跳过 null)
String result = Joiner.on(",").skipNulls().join("a", null, "b"); // "a,b"

// 拆分(保留空串)
List<String> parts = Splitter.on(',')
    .trimResults()
    .omitEmptyStrings()
    .splitToList("a, , b"); // ["a", "b"]

// 空安全
String safe = Strings.nullToEmpty(null); // ""
boolean isEmpty = Strings.isNullOrEmpty(str);

6️⃣ I/O 工具(I/O)

简化文件读写,避免资源泄漏。

📌 示例

java 复制代码
// 读取所有行
List<String> lines = Files.readLines(new File("log.txt"), StandardCharsets.UTF_8);

// 写入文件
Files.write("Hello Guava".getBytes(StandardCharsets.UTF_8), file);

⚠️ 注意:Guava 的 I/O 工具在 Java 7+ 后部分被 java.nio.file 取代,但在简单场景仍很简洁。


✅ 整体认知图谱

复制代码
Guava
├── 基础工具 → 安全、健壮(Preconditions, Objects)
├── 集合扩展 → 更表达力、不可变(Immutable*, Multimap, BiMap, Table)
├── 缓存     → 本地内存缓存(CacheBuilder)
├── 并发     → 异步回调(ListenableFuture)
├── 字符串   → 安全拼接拆分(Joiner, Splitter, Strings)
└── I/O      → 简洁文件操作(Files)

🔚 总结

  • Guava 不是"银弹",但能显著减少样板代码
  • 优先使用不可变集合(防 bug、线程安全)。
  • 缓存、集合、字符串 是最常用三大模块。
  • 与 Java 8+ 特性互补 :例如 Optional 替代部分 null 处理,Stream 替代部分集合操作,但 Guava 的 MultimapTable 仍是独特优势。

💡 建议:在新项目中按需引入(如只用 ImmutableList + Preconditions),避免全量依赖。

如需某个模块的深入示例(如 Table 做交叉统计、Cache 带刷新策略),可继续提问!

相关推荐
shuair1 天前
guava布隆过滤器及cuckoo过滤器
redis·guava
廋到被风吹走5 天前
【缓存优化】缓存穿透:布隆过滤器(Guava/RedisBloom)
缓存·guava
xdpcxq10297 天前
Spring AOP + Guava RateLimiter 用注解实现优雅限流
spring·wpf·guava
ejinxian7 天前
Google Guava实战
guava·工具库
程序员乐只11 天前
基于Python+Django+SSM热门旅游景点推荐系统(源码+LW+调试文档+讲解等)/热门旅游地推荐平台/旅游景点推荐软件/热门景点推荐系统/旅游推荐系统/旅游景点热门推荐
spring boot·spring·tomcat·hibernate·java-zookeeper·guava·java-consul
沛沛老爹1 个月前
2025年java总结:缝缝补补又一年?
java·开发语言·人工智能·python·guava·总结·web转型ai
PacosonSWJTU1 个月前
Guava缓存使用入门
java·缓存·guava
写代码的小阿帆1 个月前
Java本地缓存技术——Guava、Caffeine
java·缓存·guava