考虑一个bean的自定义 toString()
实现:
@Override
public String toString() {
String.format("this is %s", this.someField);
}
如果someField
为null,这将产生this is null
。
有没有一种方法可以覆盖默认的null
字符串表示为另一个文本,即?
,而不需要在toString
方法中显式调用replaceAll(...)
?
注意:该bean继承自一个可能实现Formattable
的超类 (http://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html),但我似乎不知道如何使其工作。
编辑:出于示例简化的考虑,代码片段过于简单,但我不寻找三元运算符解决方案someField==null ? "?" : someField
,因为:
- 在
toString()
中可能涉及许多字段,因此检查所有字段太麻烦且不流畅。 - 其他人(如果有)正在编写自己的子类。
- 如果调用方法并返回null,则需要两次调用方法或声明一个局部变量。
更准确地说,是否可以使用Formattable
接口或具有某些自定义Formatter
(final
)来完成任何操作?
String.format("this is %s", this.someField==null?"?":this.someField);
。 - Arnaud DenoyelleString.format("这是%s", Objects.firstNotNull(this.someField, "?"));
- Arnaud DenoyellefirstNotNull
念念不忘,特别是一些 SQL 方言中的类似实现,但 Guava 太重了,更适合作为 Utils 类的依赖而非 POJO 的依赖。 - VH-NZZ