4

为什么 Google Precondition 库中的 check* 方法采用对象而不是字符串?我可以看到该对象被称为 String.valueOf() 。我认为这种设计是由于没有代表客户做出任何假设。但我想不出一个合理的情况,即客户端将使用字符串以外的任何东西来调用它。

我猜客户可能会传递一个实现了 toString() 方法的对象。但是你能举一个真实的例子来说明如何使用它/你一直在使用它吗?

4

2 回答 2

7

为什么 Google Precondition 库中的 check* 方法采用对象而不是字符串?

表现。如果我有一个还不是 a 的对象String,尤其toString()是一个昂贵的方法,那么:

checkArgument(valid, obj.toString());

将无条件调用toString()并立即丢弃结果。另一方面:

checkArgument(valid, obj);

可以推迟该调用。由于检查预计会成功,因此延迟可以避免浪费。

这与使用日志格式而不是传递串联字符串的原因相同(Logger slf4j 使用 {} 格式化而不是字符串串联的优势)。

于 2015-02-10T09:32:47.843 回答
1

同意乔和加:空处理。

查看方法签名:checkArgument(boolean expression, @Nullable Object errorMessage)

于 2015-02-11T07:44:44.607 回答