2016-02-29 9 views
-1

Я учусь работать с XStream и конвертерами, но я не понимаю, для чего используются конвертеры. Я думаю, что мы можем выполнять одни и те же задачи, используя методы хэллинга-сглаживания - setter в то время до методов сериализации и геттера, когда мы хотим напечатать значения атрибутов после десериализации.Что такое использование преобразователей?

Может кто-нибудь, пожалуйста, скажите, для чего используются преобразователи xstream?

+0

Вы должны знать, что приятель. Этот сайт не для разговоров, в то же время, когда вы отправляете сообщение «Удерживать» с помощью соответствующих тегов. Поэтому постарайтесь добавить ваш точный код, связанный с запросом .. другой мудрый вы получите downvotes и Post будут на удержании. – Prasad

+0

refer it: - http://stackoverflow.com/help/how-to-ask – Prasad

ответ

0

Преобразователи подкрепляют все, что XStream делает, каждый раз, когда поле сортируется/не сортируется, это делается с помощью конвертера. Без конвертеров XStream просто не работал.

С учетом этого, я подозреваю, что этот вопрос является вопросом: почему или когда кто-то должен написать свой собственный конвертер?

И ответ: если вы хотите получить определенный выход, который не могут произвести встроенные преобразователи. Если вы не заботитесь о формате вывода (вы знаете, что он всегда будет маршаллирован/неаршаллирован с помощью XStream, не будет храниться или редактироваться кем-либо еще), почти нет необходимости в пользовательских конвертерах. Большинство классов хорошо защищены встроенными преобразователями.

Если вам нужен выходной файл в соответствии с заранее определенным форматом, вы можете найти ситуацию, когда встроенные механизмы просто не будут работать, независимо от того, как вы настраиваете элементы с помощью псевдонимов, неявных коллекций и т. П.

На этом этапе вы, конечно, можете решить просто написать некоторые пользовательский геттер/сеттер в самом классе, как вы описали, но:

  1. Что делать, если вам нужны два или более различные форматы сериализации для класс? Конечно, это случается очень редко, но хотите ли вы обременять свой класс специальным кодом для каждого выходного формата?
  2. Это не всегда работает. В частности, если формат XML/JSON уже определен в другом месте, вы можете не найти комбинацию изящных getter/seters, которые будут анализировать/выводить этот точный формат.
  3. Но даже когда они работают, и даже если есть только один целевой формат, происходит то, что вы делаете , и вы смешиваете код конвертации с классом.

Считается хорошей практикой, когда классы должны иметь четкие обязанности (желательно только по одному на класс), а также путем перевода логики преобразования в класс, в котором вы отказываетесь от этой практики.

Иногда вы действительно не имеете никакой другой разумную вариант (если у вас есть transient поля, например, стандартный способ инициализации их после немаршалинга через метод readResolve() в классе), но преобразователи XSTREAM дать вам путь отделить эту озабоченность от того, что класс действительно делает.