使 String.format("%s", arg) 以不同于 "null" 的方式显示空值参数

新手上路,请多包涵

考虑 bean 的自定义 toString() 实现:

 @Override
public String toString() {
    String.format("this is %s", this.someField);
}

这会产生 this is null 如果 someField 为空。

有没有办法覆盖默认的 null 空值参数的字符串表示到另一个文本,即 ? 而不显式调用 replaceAll(...) toString 方法?

注意:bean 继承自可以实现的超类 Formattable ( http://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html ) 但我只是不似乎不明白如何使这项工作。

编辑:为了示例,该代码段过于简化,但我不是在寻找三元运算符解决方案 someField==null ? "?" : someField 因为:

  • toString() 中可能(可能)涉及很多字段,因此检查所有字段过于繁琐且不流畅。
  • 我几乎无法控制的其他人(如果有的话)正在编写他们自己的子类。
  • 如果一个方法被调用并返回 null ,这意味着调用该方法两次或声明一个局部变量。

相反,是否可以使用 Formattable 界面或具有一些自定义 Formatter (顺便说一句,是 final )?

原文由 VH-NZZ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

使用 Java 8,您现在可以为此使用 Optional 类:

 import static java.util.Optional.ofNullable;
...
String myString = null;
System.out.printf("myString: %s",
    ofNullable(myString).orElse("Not found")
);

原文由 Dmitry Klochkov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题