Рассмотрим пользовательскую toString()
реализацию bean-компонента:
@Override
public String toString() {
String.format("this is %s", this.someField);
}
Это дает this is null
, если someField
равно нулю.
Есть ли способ переопределить строковое представление по умолчанию null
аргументов с нулевым значением другим текстом, т. е. ?
без явного вызова replaceAll(...)
в методе toString
?
Примечание. Компонент наследуется от суперкласса, который может реализовать Formattable
(http://docs.oracle.com/javase/7/docs/api/java/util/Formattable.html), но я просто не понимаю, как это сделать.
EDIT: Фрагмент слишком упрощен для примера, но я не ищу решения для троичных операторов someField==null ? "?" : someField
, потому что:
- может быть (потенциально) очень много полей, задействованных в
toString()
, поэтому проверка всех полей слишком громоздка и неудобна. - другие люди, над которыми у меня мало контроля (если таковые имеются), пишут свои собственные подклассы.
- если метод вызывается и возвращает null, это подразумевает либо двойной вызов метода, либо объявление локальной переменной.
Вернее, можно ли что-нибудь сделать, используя интерфейс Formattable
или какой-нибудь пользовательский Formatter
(кстати, final
)?
String.format("this is %s", this.someField==null?"?":this.someField);
- person Arnaud Denoyelle   schedule 05.12.2013String.format("this is %s", Objects.firstNotNull(this.someField, "?"));
- person Arnaud Denoyelle   schedule 05.12.2013firstNotNull
, особенно. аналогичные реализации некоторых диалектов SQL, но Guava слишком тяжелая зависимость и больше относится к зависимостям класса Utils, чем к pojo, imo. - person VH-NZZ   schedule 05.12.2013