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 带刷新策略),可继续提问!

相关推荐
写代码的小阿帆1 天前
Java本地缓存技术——Guava、Caffeine
java·缓存·guava
weixin_515069661 天前
1.guava-retrying 重试框架
java·框架·guava·java常用api
山河亦问安7 天前
令牌桶算法的限流组件实现
guava
聊天QQ:2769988513 天前
多智能体分布式模型预测控制在编队中的奇幻之旅
guava
武子康14 天前
Java-193 Spymemcached 深入解析:线程模型、Sharding 与序列化实践全拆解
java·开发语言·redis·缓存·系统架构·memcached·guava
武子康15 天前
Java-192 深入拆解 EVCache 内部原理:Memcached 架构、Slab 分配与 LRU 过期机制全解析
数据库·redis·缓存·架构·memcached·guava·evcache
武子康16 天前
Java-190 EVCache入门:Netflix 级分布式缓存架构、性能指标与多区域部署全解析
java·redis·分布式·缓存·架构·guava·guava cache