Google Guava:快速入门

本文介绍 Google Guava 库的基本用法,包括 Objects、Throwables、Iterables、Preconditions 和 Constraints 的功能。Guava 是一个强大的 Java 函数库,提供集合处理、字符串操作、并发、I/O 操作等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]Google Guava快速入门[/b]

众所周知,Apache commons提供了一系列强大的功能库,对JDK提供了很好的补充,但是这里不介绍commons,这里介绍给大家的是Google Guava,一个被多数人遗忘的英雄。他是一个独立的库,为大家提供了日常开发经常使用的函数,包括集合处理、字符串处理、并发、IO、原始类型处理和异常处理等。

Google Guava太强大,里面函数太多,这里我只能选取一些比较典型的介绍给大家,让大家有一个初步的认识。

[b]Objects[/b]
Objects是的实现类的hashcode()/equals()方法很简单,那些希望在类里面实现toString()以方便调试和日志查看的情况,自己写toString()实在太麻烦了,Objects.toStringHelper()就能够使得这项工作很简单:

public class Item {
private String id;
private String name;

public Item(String id, String name) {
this.id = id;
this.id = name;
}

public String getId() {
return id;
}

public String getName() {
return name;
}

@Override
public int hashCode() {
return Objects.hashCode(getId(), getName());
}

@Override
public String toString() {
return Objects.toStringHelper(this).add("id", getId()).add("name", getName()).toString();
}

@Override
public boolean equals(Object o) {
if (!(o instanceof Item)) {
return false;
}
Item other = (Item) o;
return Objects.equal(getId(), other.getId()) && Objects.equal(getName(), other.getName());
}
}

这个toString的结果是:
Item{id=1, name=Book}


[b]Throwables[/b]

对异常对象进行封装不总是合适的,因为这可能导致ClassNotFoundException(可能因为不同的classloader或者序列化导致此问题),Throwables能够解耦,并且允许远程的客户端看到异常堆栈的内容:

try {
// throws implementation specific exception
} catch (InternalException e) {
throw new ApiException("reason", Throwables.getStackTraceAsString(e));
}


[b]Iterables[/b]
对两个集合进行合并,然后对他们的元素进行处理,这个工作需要耗费很多的代码,但是有了Iterables,事情就简单多了:
for (Item item : Iterables.concat(books, electronics)) {
// do something useful
}


[b]Preconditions[/b]
很多情况下,一个类的构造函数或者方法的参数都需要对参数的值进行限制,非法的值应该被及时发现和处理,一般情况下,对这些非法的情况快速的返回异常比在后面再处理要好得多。

public Item(String id, String name) {
this.id = Preconditions.checkNotNull(id, "id must not be null");
this.name = Preconditions.checkNotNull(name, "name must not be null");
Preconditions.checkArgument(name.length() > 6, "name must be longer than 6 chars");
}


[b]Constraints[/b]
Constraints和Preconditions很类似,但是它是被用来限制集合的元素,这样能够使得代码很干净,因为限制性的代码和业务代码分开了。

public class Voyage {
private Country targetcountry;
private int capacity;
private List<Cargo> items = Constraints.constrainedList(new ArrayList<Cargo>(), new Constraint<Cargo>() {
@Override
public Cargo checkElement(Cargo cargo) {
Preconditions.checkNotNull(cargo);
Preconditions.checkArgument(targetcountry.allows(cargo));
Preconditions.checkArgument(cargo.getUnits() gt; 0);
return cargo;
}
});

public void load(List<Cargo> cargos) {
items.addAll(cargos);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值