转换器有什么用?

时间:2016-02-29 18:14:05

标签: xstream converters

我正在学习使用XStream和转换器,但我不能正确理解使用的转换器。我想我们可以通过使用xstream别名来执行相同的任务 - 序列化之前的setter方法和我们想要在反序列化之后打印属性值的getter方法。

那么有人可以告诉我xstream转换器的用途吗?

1 个答案:

答案 0 :(得分:0)

转换器支持XStream所做的一切,每次对一个字段进行编组/解组,它都由转换器完成。没有转换器,XStream根本不会工作。

有了这个问题,我怀疑这个问题的关键是:为什么或何时有人应该编写自己的自定义转换器?

答案是:当您需要内置转换器无法生成的特定输出时。如果您不关心输出格式(您知道它将始终使用XStream进行编组/解组,不会被其他任何人存储或编辑),几乎可以肯定不需要自定义转换器。内置转换器可以很好地覆盖大多数类。

但是,如果您需要输出与预定义的格式相匹配,那么无论您如何使用别名,隐式集合等进行调整,您都可能会发现内置机制无法完成的情况。

此时你当然可以决定在课堂上自己编写一些自定义的getter / setter,如你所描述的那样,但是:

  1. 如果您需要为类提供两种或更多种不同的序列化格式,该怎么办?当然,这种情况很少发生,但您是否希望为每个输出格式的专用代码增加您的类负担?
  2. 它始终不起作用。特别是如果XML / JSON格式已在其他地方定义,您可能找不到将解析/输出该格式的棘手的getter / setter组合
  3. 但即使它们有效,即使只有一种目标格式,会发生什么呢?您将部分转换代码混合到类本身。
  4. 对于课程来说,明确的职责(最好每个课程只有一个)被认为是一种良好的做法,并且通过在课堂上设置转换逻辑来放弃这种练习。

    有时你真的没有其他合理的选择(例如,如果你有transient字段,解组后初始化它们的标准方法是通过readResolve()方法class),但是XStream转换器为您提供了一种将该关注点与该类实际操作分开的方法。