Guava 入门篇

Guava使用有一段时间了,总结一下。

 

 【资源】

官网:http://code.google.com/p/guava-libraries/

>WHY Guava

http://stackoverflow.com/questions/4542550/what-are-the-big-improvements-between-guava-and-apache-equivalent-libraries

>如何学习

目前没有CookBook之类的书,主要资料就是官网的Wiki(强烈推荐)及 几个Google的pdf文档。

这里强调一下Wiki的重要性,API只是说明库的使用,而为什么要实现这些API,有哪些好处就必须阅读上面的资料了。(如wiki中对,NULL值得危害还防御策略,不可变性的好处等都做了细致的论述。)

>QA(国内好像用得还不多,只能推荐英文的了)
http://stackoverflow.com/questions/tagged/guava

【关于依赖包】

有两个,都是引入注解的。
  jsr305-1.3.9.jar
  大量使用 @Nullable 等,方便FindBugs这样的工具来检测bug。对代码机能无影响。
  javax.inject-1.jar
  只在 com.google.common.util.concurrent.ServiceManager 类中涉及到注入的内容

【关于代码中的注解】

com.google.common.annotations 下的有这几个注解类经常出现在代码中:
  @Beta
    这个标识很有意思,它标识此API是"not API-frozen"的,即未来版本中它可能修改或删除。也就是提醒使用者使用它要慎重。
  @GwtCompatible / @GwtIncompatible
    分别表示GWT兼容 和 GWT不兼容(这个可以无视)
  @VisibleForTesting
    该类只用于测试代码中

【Guava库特点】

Guava 是Goolge的基础类库,整体质量不必说。有哪些好东西值得学习呢。
1)编码风格包括注释与JDK 高度一致,特别是阅读 com.google.common.collect  感受最为明显。

具备“准JDK”的基本条件。

 

2)大量使用工厂方法
典型的方法名有:
of() / copyOf()
create() / builder() / newBuilder()
newXXX (XXX为类名)

3)防御性编程的优良典范
Null值防御: 包中 checkNotNull()方法随处可见。
不可变类(Immutablexxx,尽可能使用final)

4)大量使用连缀编程(类似JQuery),程序精简而优雅。又可分为两种:
>用调用自身方法

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()               
       .maximumSize(1000)                           //配置参数maximumSize
       .expireAfterWrite(10, TimeUnit.MINUTES)      //配置参数expireAfterWriteNanos
       .removalListener(MY_LISTENER)                //配置参数removalListener
       .build();

 一般这类方法最后都有一句“return this”,搜索可以发现,Guava包中有200以上的“return this”。


>用多次构造实现

Splitter.on("\n")
        .omitEmptyStrings()                //配置参数omitEmptyStrings 设为true
        .trimResults(CharMatcher.is('|'))  //配置参数trimmer
        .limit(5)                          //配置参数limit
        .split(strObject);

 上面on() omitEmptyStrings() trimResults() limit() 四个方法分别new Splitter(),只是后者会复用前者的成员变量。

 

5)其他种种 Effectiv Java

>相比继承更加推荐组合(如:ForwardXXX 集合类,一个装饰模式实现)

>enum 实现单例模式(如:Functions类中 ToStringFunction)

>序列化代理模式(如:LocalCache类中 ManualSerializationProxy)

。。。

 

【小结】

作为Apache Commons的替代,Guava的起点较高,维护和更新要频繁得多,有Google的强大资源和技术优势,相信未来应用会逐渐超过Commons。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值