java - 使用 JaxB 解码具有唯一值

标签 java jaxb unmarshalling

我有 xml 返回,

<UniequeTestList>
 <UniequeTest>
  <FirstName>a</FirstName>
  <LastName>b</LastName>
 </UniequeTest>
 <UniequeTest>
  <FirstName>a</FirstName>
  <LastName>b</LastName>
 </UniequeTest>
</UniequeTestList>

我在 List<UniequeTest> 中使用 JaxB 解码它. 显然,该列表必须具有多个相同的对象。 我可以在解码它的同时使其唯一吗?

我不能同时使用 HashSet 或 LinkedHashSet 使其唯一。我的意思是,如果该对象下的值相同,我在 Unmarshall 列表中想要的是唯一对象。

最佳答案

您最终可以使用 JAXB Unmarshaller 的监听器:

 class JAXBUnmarshallingListener extends Unmarshaller.Listener {

   @Override
   public void beforeUnmarshal(Object target, Object parent) {
   }

   @Override
   public void afterUnmarshal(Object target, Object parent) {
   }
 }

在回调方法中,您可以实现一个简单的缓存,并用您自己的唯一实例替换 JAXB 新创建的对象(新的 JAXB 实例之后将被垃圾收集,因为没有人继续引用它。注意此方法不会为您节省实例化和这些对象的 gc 的成本。)。

关于java - 使用 JaxB 解码具有唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074383/

相关文章:

java - 整个代码私有(private)静态

java - JAXB:如何指定complexType由不同的XSD生成的绑定(bind)规则?

java - 在运行时使用 Jackson 为多态添加 SubType 信息

java - 什么 xmlAdapter 使用 JAXB 来解码 base64Binary

json - Golang JSON Unmarshal 序列号

java - XML 解码为 java 对象

java - 替换 URL 中的符号不​​起作用

java - 将项目添加到 Apple

java - java编译器的源代码在哪里?

java - 从大型 XML 文件中删除不可打印和/或 unicode 字符