1、为什么使用guava?
主要针对jdk1.5,jdk1.6中的接口进行封装或者优化,为常用的服务提供更丰富的结构支持,提供更安全代码操作。关键词:更优化、更安全、更丰富
2、guava主要提供哪些方面的接口支持?
- I/O:主要针对jdk中的I/O异常可能会导致数据写失败问题,针对输入源Sources和输出地Sinks构建了更安全的读写及数据流关闭接口,主要包括:ByteSource/CharSource/ByteSink/CharSink/Closer,该机制有效的解决的数据流关闭异常可能会导致的问题,更安全;
- Strings:提供了字符串操作相关的接口。主要针对jdk中字符串处理接口中的一些ambiguous含糊的处理方式进行优化,对一些可能不符合编程规范的接口进行同样的标准化。这里提供的主要接口包括:Joiner/Splitter/CharMatcher/Charsets/CaseFormat, 因此当你需要用到jdk中相关的字符串接口时,请考虑采用该guava接口替代;
- primitive types:原生类型更丰富。丰富jdk提供的原生接口、数组。提供了相应的无符号数、字节转换等接口。
- hashcode散列机制:针对jdk为对象Object提供的散列机制的缺点(i. 将散列算法与作用的数据对象放在一起未分离开来;ii.hashcode限制在32位,实现的质量比较低;iii.hash冲突和bit的分散性),提供了相关的改正策略,主要实现了:HashFunction/Hasher/Funnel相关机制实现对对象的hashcode计算。此外该机制实现了布隆过滤器BloomFilter的支持。
- Math:优化了jdk的Math包,提供了具有更明确语义的基本运算、浮点运算支持,同时还支持检查条件判断,对于可能造成异常的运算不采取容忍策略,而是尽快的报错。
- Reflection:反射机制。关键是TypeToken类。由于jdk类在runtime时不为对象保存类型信息,但是TypeToken却可在运行时获取类型,同时还支持未具体化的类型。
- Caches:提供了本地缓存机制,当然如果是服务端缓存可使用memcache。提供了.asMap可将其转换为类ConcurrentHashMap进行处理。
-
Collections:丰富其接口,针对常用的应用场景提供了更丰富的数据结构支持,主要包括:(ImmutableSet/MultiSet/MultiMap/BiMap/ClassToInstanceMap),这些类在很多应用场景下都可能会使用到,直接调用guava提供的接口可能大大减少我们的工作量,提高工作效率。
- Preconditions
- Eventbus
- 函数式编程functional programming。(未完待续)
参考文档:https://code.google.com/p/guava-libraries/wiki/HashingExplained