为什么 Google Precondition 库中的 check* 方法采用对象而不是字符串?我可以看到该对象被称为 String.valueOf() 。我认为这种设计是由于没有代表客户做出任何假设。但我想不出一个合理的情况,即客户端将使用字符串以外的任何东西来调用它。
我猜客户可能会传递一个实现了 toString() 方法的对象。但是你能举一个真实的例子来说明如何使用它/你一直在使用它吗?
为什么 Google Precondition 库中的 check* 方法采用对象而不是字符串?我可以看到该对象被称为 String.valueOf() 。我认为这种设计是由于没有代表客户做出任何假设。但我想不出一个合理的情况,即客户端将使用字符串以外的任何东西来调用它。
我猜客户可能会传递一个实现了 toString() 方法的对象。但是你能举一个真实的例子来说明如何使用它/你一直在使用它吗?
为什么 Google Precondition 库中的 check* 方法采用对象而不是字符串?
表现。如果我有一个还不是 a 的对象String
,尤其toString()
是一个昂贵的方法,那么:
checkArgument(valid, obj.toString());
将无条件调用toString()
并立即丢弃结果。另一方面:
checkArgument(valid, obj);
可以推迟该调用。由于检查预计会成功,因此延迟可以避免浪费。
这与使用日志格式而不是传递串联字符串的原因相同(Logger slf4j 使用 {} 格式化而不是字符串串联的优势)。
同意乔和加:空处理。
查看方法签名:checkArgument(boolean expression, @Nullable Object errorMessage)