使 String.format(“%s”, arg) 显示空值参数的方式与“空值”不同

考虑一个 Bean 的自定义实现:toString()

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

这将产生 if 为 null。this is nullsomeField

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

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

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

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

相反,可以使用界面或进行一些自定义(顺便说一句)来完成任何事情吗?FormattableFormatterfinal


答案 1

在java 8中,您现在可以使用Anstable类来实现以下目的:

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

答案 2

对于不需要外部库的 Java 7 解决方案:

String.format("this is %s", Objects.toString(this.someField, "?"));