Guava介绍

前言

如何学习源码,直接看JDK,多学习其他小而精巧的开源项目,绝对有益,而Guava项目则可直接满足需求,小而精,有了阅读JDK源码的经验,相信Guava的品读过程也会比较愉快,尽可能每天分析一个类。

介绍

关于Guava,网上有很多介绍,我这里只简单进行介绍,其实说白了就是对Java中一些类进行再一次封装,或者添加一些类,让其变得更好用。

基础特性

  • 使用和避免nullnull是模棱两可的,会引起令人困惑的错误,很多Guava工具类用快速失败拒绝null值。
  • 前置条件。让方法中的条件检查更简单。
  • 排序。Guava强大的”流式风格比较器”
  • Throwables。简化了异常和错误的传播与检查。

集合

  • 不可变集合。用不变的集合进行防御性编程和性能提升,与scala中很像。
  • 新集合类型。multisetsmultimapstablesbidirectional maps等。
  • 强大的集合工具类。提供java.util.Collections中没有的集合工具。
  • 扩展工具类。让实现和扩展集合类变得更容易,比如创建Collection的装饰器,或实现迭代器。

缓存

本地缓存实现,支持多种缓存过期策略

函数式风格

函数式编程可以显著简化代码,但请谨慎使用。

并发

  • ListenableFuture。完成后触发回调的Future
  • Service框架。抽象可开启和关闭的服务,帮助维护服务的状态逻辑。

字符串处理

提供非常有用的字符串工具,包括分割、连接、填充等操作。

原生类型

扩展JDK未提供的原生类型(如intchar),包括某些类型的无符号形式。

区间

可比较类型的区间API,包括连续和离散类型。

I/O

简化I/O,尤其是I/O流文件的操作。

散列

提供比Object.hashCode()更复杂的散列实现,并提供BloomFilter的实现。

事件总线

发布-订阅模式的组件通信,但组件不需要显式地注册到其他组件中。

数学运算

优化的、充分测试的数学工具类。

反射

提供反射机制工具类。

总结

本篇大致讲解了Guava类库的基础特性和基于Java做的优化和补充,后续会对源码进行详细分析。

参考