class Book {
private String title;
private String author;
private Double price;
private Date publDate;
...
}
Я хочу для этого класса получить toString-like отображение.
Удобный для этого способ - взять и применить ToStringBuilder из библиотеки apache commons lang.
Полное имя этого класса - org.apache.commons.lang.builder.ToStringBuilder.
Способ №1 - руками переопределить метод toString и, с помощью этого класса, описать способ конструирования строкового отображения объектов. Ничего особо примечательного здесь нет, за исключением удобства, которое добавляет упомянутый ToStringBuilder.
@Override
public String toString() {
return new ToStringBuilder(this)
.append("title", title)
.append("author", author)
.append("price", price)
.append("date", publDate)
.toString();
}
А вот вид получаемой строки зависит от заданного на момент вызова стиля (формата). Примеры этих форматов - чуть низже.
Способ №2 интереснее - он использует reflection. В этом случае мне достаточно вызвать ToStringBuilder.reflectionToString(мой-объект), не занимаясь перечислением имён полей и их значений вручную.
Например, для такого случая
Book book = new Book();
book.setAuthor("Gregory M.");
book.setTitle("The Secret Book of Secrets");
book.setPrice(15.03);
book.setPublDate(null); // это специально, чтобы явно показать null-значение
вызов
System.out.println(ToStringBuilder.reflectionToString(book));
вернёт такой вот результат:
>>> javaapplication243.Book@10b30a7[title=The Secret Book of Secrets,author=Gregory M.,price=15.03,publDate=]
Да, вот эти >>> я добавил в результат сам, для удобства (моего) при чтении.
Есть несколько способов повлиять на формат получаемого результата.
Результат, показанный чуть выше, получен при использовании формата, используемого по-умолчанию. Имя этого формата - DEFAULT_STYLE.
Можно руками, вызвав статический метод, указать формат, который я хочу использовать:
ToStringBuilder.setDefaultStyle(ToStringStyle.MULTI_LINE_STYLE);
А можно указать нужный формат явным образом, например, вот так:
ToStringBuilder.reflectionToString(book, ToStringStyle.MULTI_LINE_STYLE)
Теперь самое интересное - какие форматы есть и как они влияют на результат.
DEFAULT_STYLE
>>> javaapplication243.Book@10b30a7[title=The Secret Book of Secrets,author=Gregory M.,price=15.03,publDate=]
MULTI_LINE_STYLE
>>> javaapplication243.Book@10b30a7[
title=The Secret Book of Secrets
author=Gregory M.
price=15.03
date=
]
SHORT_PREFIX_STYLE
>>> Book[title=The Secret Book of Secrets,author=Gregory M.,price=15.03,publDate=]
NO_FIELD_NAMES_STYLE
>>> javaapplication243.Book@10b30a7[The Secret Book of Secrets,Gregory M.,15.03,]
SIMPLE_STYLE
>>> The Secret Book of Secrets,Gregory M.,15.03,
Комментариев нет:
Отправить комментарий