java - 为什么 Google Precondition Library 中的 Checkers 接受对象而不是字符串

标签 java gwt guava preconditions

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

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

最佳答案

Why does check* methods in Google Precondition library take an Object instead of a String?

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

checkArgument(valid, obj.toString());

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

checkArgument(valid, obj);

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

这与使用日志格式而不是传递连接字符串 (Logger slf4j advantages of formatting with {} instead of string concatenation) 的原因相同。

关于java - 为什么 Google Precondition Library 中的 Checkers 接受对象而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427965/

相关文章:

java - GXT GridInlineEditing 字段验证

java - 我应该如何使用 google guava hashCode() 调用 super.hashcode

java - 如何使用 Guava 连接两个表

java - 使用随机数打乱数组

java - 在 Java 中将字符串转换为带 2 个小数位的十进制数

java - 如何使用 GWT 制作水平可扩展的 StackPanel?

java - 为什么 Tomcat 无法显示实际的堆栈跟踪?

java - Guava Resources getResource() 第一次不工作

java - for循环和数组比较问题

java - 在 java 上实现的工作 oauth2 提供程序服务器