随着java
版本的更新提供了越来越多的语法和工具来简化日常开发,但是我们一般用的比较早的版本所以体验不到。这时就用到了guava
这个包。guava
提供了很多方便的工具方法,solar
框架就依赖了guava的16.0.1
版本,这里稍微介绍下。
一、集合工具类
平常有时候会在初始化类时候创建一些含有数值的集🈴属性,或者在调用方法传参时候需要自己创建一个集🈴,然后添加需要的东西进去之后将集🈴作为参数传给方法。就像下面这样:
这里不管是在构造方法里面设值还是创建一个list
,将需要的东西add
进去之后再作为参数调用method
都非常麻烦。如果用guava
,改成下面这样就可以了:
这里的ImmutableMap
创建的是一个不可变的Map
,对他调用put
方法会报错。如果需要可变Map
,可以用Maps
。newHashMap()
重新包装下就好了。 另外guava
还包含很多关他集🈴类型:比如支持多个相同值的Multiset
另外还有支持单key
多value
的Multimap
,或者Table
这样的支持行列查找的集🈴类等等
二、缓存
guava
提供了一些非常方便的Cache
组件,比如获取时如果为空则根据提供的实现创建或者获取一个Value
返回的LoadingCache
,像下面这样可以创建一个在value
没有其他强引用时直接能被回收的缓存
这里get
时候如果cache
里面为null
,则会通过提供的CacheLoader
实现返回一个value
。另外,还有支持指定最多size
或者最多weight
的缓存,当超过最多限制时候会自动去掉最早的键值对
以及定时的cache
来支持指定读写操作之后多少时间清理掉这个键值对
三、ListenableFuture
有时候我们会建立一个ExecutorService
去做一些事情,但是在把任务提交后就只能干等却任务不知道什么时候完成,如果想在任务完成后做一些回调之类的事情就会很麻烦。guava
提供了ListenableFuture
这么个东西,比java
自带的Future
要好用很多。
另外还有支持设置返回结果或者异常的SettableFuture
以及支持将抛出的异常转成自定义受检异常的CheckedFuture
等。
四、事件总线
事件总线提供了对数据发布订阅的支持。
任何一个订阅了特定类型的方法被注册后,都能接收到post
出来的特定类型数据,这样方便了模块之间解耦🈴,使用起来非常方便。并且可以做到像第三节讲的,在线程完成一个任务后将数据post
出去执行回调。存在的问题是订阅点多的话要找到这个事件对应的订阅处理方法比较困难。 另外guava
还提供了AsyncEventBus
,支持异步的分发事件方式,这样就不用等之前的事件处理完成再进行下一个分发了。
五、其他
guava
还提供了很多方便使用的工具类,比如支持文件遍历,获取文件的文件名或者后缀,获取文件流的Files
工具类;以及提供一些java
中Math
里没有的额外的数学运算方法,或者更有效率实现方式的数学运算工具类,(Int|Long|Double)Math
等。