![](/img/trans.png)
[英]Generating and customizing equals/hashcode methods with CXF/JAXB2
[英]JAXB objects - hashcode and equals
我们有一个巨大的Java应用程序,完全基于JAXB序列化。中间件服务器执行所有数据库访问并发送JAXB对象中的所有数据对象并序列化为XML并将数据发送到UI(C#.Net)。
数据从db访问到JAXB java对象的大部分时间后,我将不得不进行一些处理,比如“根据属性对对象集合进行排序”,找到avg,在对象列表中做一些计算。收集等
我的主要问题是,JAXB对象没有equals和hashcode。 所以我正在做的是将所有数据移动到一些用户定义的数据对象,其中我有hashcode,equals,compareTo定义,所以我可以在集合中执行所有操作,然后复制到JAXB对象。 我认为这是一个额外的开销。
问题:
1)jaxb对象是否支持equals / hashcode / compareTo - 我可以在模式中指定这些吗?
2)还有其他更好的选择吗?
谢谢。
看起来你需要使用Collections.sort(list,Comparable)来完成你想要的排序。 由于您的案例依赖于特定属性的比较而不是整个对象,因此Equals和hashcode对您提到的任何一种情况都没有帮助。
查找平均值和执行计算的其他情况也与我可以看到的equals / hashcode无关。 这些操作只需要解析列表并执行适当的算法。
FWIW,虽然JAXB生成的Java类不具有equals和hashcode,但您可以在使用JAXB注释编写的类中添加这些覆盖 - JAXB将忽略这些方法。
maven-jaxb2-plugin可以使用自己的插件生成hashcode和equals方法: org.jvnet.jaxb2_commons 。 有关配置的更多详细信息,请参见此处 。
pom.xml的相关部分如下:
<project
<!-- other configuration -->
<dependencies>
<!-- other dependencies -->
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.11.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.13.1</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-XtoString</arg>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.11.0</version>
</plugin>
</plugins>
<schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
<cleanPackageDirectories>true</cleanPackageDirectories>
</configuration>
</plugin>
</plugins>
</build>
</project>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.