我正在学习使用XStream和转换器,但我不能正确理解使用的转换器。我想我们可以通过使用xstream别名来执行相同的任务 - 序列化之前的setter方法和我们想要在反序列化之后打印属性值的getter方法。
那么有人可以告诉我xstream转换器的用途吗?
答案 0 :(得分:0)
转换器支持XStream所做的一切,每次对一个字段进行编组/解组,它都由转换器完成。没有转换器,XStream根本不会工作。
有了这个问题,我怀疑这个问题的关键是:为什么或何时有人应该编写自己的自定义转换器?
答案是:当您需要内置转换器无法生成的特定输出时。如果您不关心输出格式(您知道它将始终使用XStream进行编组/解组,不会被其他任何人存储或编辑),几乎可以肯定不需要自定义转换器。内置转换器可以很好地覆盖大多数类。
但是,如果您需要输出与预定义的格式相匹配,那么无论您如何使用别名,隐式集合等进行调整,您都可能会发现内置机制无法完成的情况。
此时你当然可以决定在课堂上自己编写一些自定义的getter / setter,如你所描述的那样,但是:
对于课程来说,明确的职责(最好每个课程只有一个)被认为是一种良好的做法,并且通过在课堂上设置转换逻辑来放弃这种练习。
有时你真的没有其他合理的选择(例如,如果你有transient
字段,解组后初始化它们的标准方法是通过readResolve()
方法class),但是XStream转换器为您提供了一种将该关注点与该类实际操作分开的方法。