Google Guava 使用经验总结

Google 的guava 和 Apache 的 commons 是两个很好用的类库,里面有的包存在功能重叠,但是对我们来说择优而用显然可以极大的提高开发效率。

网上教程很多,大概写写自己用到的


Guava:


1. Optional

有效避免空指针错误。让Null快速失败来拒绝null值是一个非常好的选择。

Java 8 也引入了这个功能,并且在这个基础上还有扩展。

下面是一个简单的示例:

public static void main(String[] args) {

    GuavaOptional guavaOptional = new GuavaOptional();

    Integer value1 =  null;
    Integer value2 =  new Integer(10);
    
    //Optional.fromNullable - allows passed parameter to be null.
    Optional<Integer> a = Optional.fromNullable(value1);
    //Optional.of - throws NullPointerException if passed parameter is null
    Optional<Integer> b = Optional.fromNullable(value2);

    System.out.println(guavaOptional.sum(a,b));
}

public Integer sum(Optional<Integer> a, Optional<Integer> b){
    Integer value1 = a.or(0);

    Integer value2 = b.or(0);

    return value1 + value2;
}


2. Preconditions 前置条件

Lombok 的@NonNull 也可以做非空的输入判断,原理是增加额外代码

public Integer sum(@NonNull Optional<Integer> a, Optional<Integer> b) {
    if(a == null) {
        throw new NullPointerException("a");
    } else {
        Integer value1 = (Integer)a.or(Integer.valueOf(0));
        Integer value2 = (Integer)b.or(Integer.valueOf(0));
        return Integer.valueOf(value1.intValue() + value2.intValue());
    }
}

Preconditions 不仅可以做非空检查,还有:checkArgument(), checkNotNull(), checkState(), checkElementIndex(), checkPositionIndex() 等等,相比自由度更高。 而且还不会降低UT coverage率。当发生错误的时候自动抛出运行时异常。


3. Objects: 

Object.equals 在使用之前必须要进行null检查。Objects.equals省去了这个过程。

Objects.hashCode(field1, field2, ......): 在override一个bean的hashCode()函数的时候,可以选择Lombok @Data自动生成,也可以选择自己手动选择需要的fileds进行哈西散列设计,Obeject.hashCode()则会对传入的字段序列计算合理的哈西值。

Objects.toString帮助编写有用的toString()方法。

为了实现比较器,类要继承Comparable接口,也可以通过ComparisonChain来实现其中的compareTo()方法。(同理Comparator)


4.  Ordering(Comparator的实现)

可以生成各种复杂的排序器。用例: Collections.sort(list, ordering);


5.  Collections(集合):

不可变集合:ImmutableSet,  ImmutableList, ImmutableMap 等等

优点:作为常量来安全使用,多线程安全,节省时间空间,更好的内存利用率

JDK也提供了相似的方法: Collections.unmodifiableXXX 来把集合包装为不可变形式,但是相比之下:笨重,不安全,低效。

public static final ImmutableMap<String, Integer> COLOR = ImmutableMap.of(
        "yello", 1,
        "red", 2,
        "black", 3);
新集合类型:multisets, multimaps, tables, bidirectional maps等等

强大的集合工具类:java.util.Collections 已经非常常用了,Guava沿用这些路线提供了更多的工具方法。这是Guava最流行和成熟的部分之一。

比如在UT 中常用的List生成代码:

List<String> testList = Lists.newArrayList("a", "b", "c", "d");

6. 字符串处理

在我们Team已经非常流行了。

Joiner: 字符串连接,传统的字符串连接,如果含有null,操作会出现问题。

Joiner.on("-").skipNulls().join("a", "b", "c", "d", null)
Splitter: 字符串拆分

之前的String.split()功能比较单一。

Splitter.on(",")
        .trimResults()
        .omitEmptyStrings()
        .split("a,b,  c, , d")

        可以得到结果 [a, b, c, d]

CharMatcher: 字符匹配器

Charsets: 字符集

CaseFormat: 大小写格式 

CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_UNDERSCORE, "bob-is-good-boy")
       可以得到输出: bob_is_good_boy


更多的实用工具:I/O,数学运算,缓存,并发等等。


Apache.Commons




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值