Многие (если не все) библиотеки с полезными методами-утилитами предоставляют возможность автоматизировать рутинное кодирование таких стандартных методов как hashCode(), equals() и toString(). В этой заметке приведены примеры метода toString(), которые созданы с помощью библиотек Google Guava, Apache Commons и Lombok.
Давайте создадим простенький класс, который в дальнейшем будем использовать в примерах:
Если сейчас его скомпилировать и запустить, то на консоль будет выведена примерно следующая строчка:
Language@19f953dЭто пример вывода Object.toString(), который просто выводит название класса и его хэш код.
Lombok
Я уже писал о проекте Lombok, который занимается генерацией методов на основе аннотаций. В этот раз приведу пример использования @ToString:
Да, это всё! Достаточно лишь одной аннотации! Как вы увидите позже, это самый компактный из всех приведённых в этом обзоре способов. Кроме того, не забывайте, что в отличие от прочих библиотек Lombok необходим только на стадии компиляции.
Вот что теперь выведет наша программа:
Language(id=1, name=Russian, locale=ru_RU)
Google Guava
Следующим претендентом у нас будет Guava. Здесь уже необходимо немного больше ручного вмешательства:
Метод Objects.toStringHelper() принимает в качестве аргумента название класса. В случае передачи this будет использовано простое имя класса. Результат получился практически идентичным тому, что нагенерил мне Lombok, разве что скобки фигурные:
Language{id=1, name=Russian, locale=ru_RU}
Apache Commons
И последним в списке мы попробуем commons-lang, а именно класс ToStringBuilder:
Код очень похож на пример с Guava, потому что оба используют паттерн Builder.
Результаты же немного различаются:
Language@93dcd[id=1,name=Russian,locale=ru_RU]
ToStringStyle.DEFAULT_STYLE | Language@93dcd[id=1,name=Russian,locale=ru_RU] |
ToStringStyle.MULTI_LINE_STYLE | Language@93dcd[ id=1 name=Russian locale=ru_RU ] |
ToStringStyle.NO_FIELD_NAMES_STYLE | Language@93dcd[1,Russian,ru_RU] |
ToStringStyle.SHORT_PREFIX_STYLE | Language[id=1,name=Russian,locale=ru_RU] |
ToStringStyle.SIMPLE_STYLE | 1,Russian,ru_RU |
Кроме того, есть возможность взять любой из них и «подогнать» его под себя путём переопределения необходимых методов.
Комментариев нет:
Отправить комментарий