前言
如何学习源码,直接看
JDK
,多学习其他小而精巧的开源项目,绝对有益,而Guava
项目则可直接满足需求,小而精,有了阅读JDK
源码的经验,相信Guava
的品读过程也会比较愉快,尽可能每天分析一个类。
介绍
关于
Guava
,网上有很多介绍,我这里只简单进行介绍,其实说白了就是对Java
中一些类进行再一次封装,或者添加一些类,让其变得更好用。
基础特性
- 使用和避免
null
。null
是模棱两可的,会引起令人困惑的错误,很多Guava
工具类用快速失败拒绝null
值。 - 前置条件。让方法中的条件检查更简单。
- 排序。
Guava
强大的”流式风格比较器” Throwables
。简化了异常和错误的传播与检查。
集合
- 不可变集合。用不变的集合进行防御性编程和性能提升,与
scala
中很像。 - 新集合类型。
multisets
,multimaps
,tables
,bidirectional maps
等。 - 强大的集合工具类。提供
java.util.Collections
中没有的集合工具。 - 扩展工具类。让实现和扩展集合类变得更容易,比如创建Collection的装饰器,或实现迭代器。
缓存
本地缓存实现,支持多种缓存过期策略
函数式风格
函数式编程可以显著简化代码,但请谨慎使用。
并发
ListenableFuture
。完成后触发回调的Future
。Service
框架。抽象可开启和关闭的服务,帮助维护服务的状态逻辑。
字符串处理
提供非常有用的字符串工具,包括分割、连接、填充等操作。
原生类型
扩展
JDK
未提供的原生类型(如int
、char
),包括某些类型的无符号形式。
区间
可比较类型的区间
API
,包括连续和离散类型。
I/O
简化
I/O
,尤其是I/O流
和文件
的操作。
散列
提供比Object.hashCode()更复杂的散列实现,并提供
BloomFilter
的实现。
事件总线
发布-订阅模式
的组件通信,但组件不需要显式地注册到其他组件中。
数学运算
优化的、充分测试的数学工具类。
反射
提供反射机制工具类。
总结
本篇大致讲解了
Guava
类库的基础特性和基于Java
做的优化和补充,后续会对源码进行详细分析。