我发现了一些非常奇特的东西,可能是微不足道的。当您在XSD中定义一个类型为xs:long
的元素,而不设置minOccurs="0"
,并通过JAXB运行它时,得到的元素类型为long
。但是,当您在XSD元素中设置minOccurs="0"
时,结果元素的类型为Long
。注意long
和Long
数据类型之间的差异
现在,通过我所做的工作,我做了一些if (thisVariable == null)
测试,当然,long
不能为null。CCD_ 10可以。
*我想知道的是,这是JAXB中的一个错误,导致了结果变量之间的差异,还是这些结果变量按照它们的方式出现*
以下是我用来测试的文件:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema id="ReportRequestWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ReportRequestWrapper">
<xs:complexType>
<xs:sequence>
<xs:element name="queryId" type="xs:long" minOccurs="0" />
<xs:element name="reportId" type="xs:long" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
CCD_ 11和CCD_
public class ReportRequestWrapper {
protected Long queryId;
protected Long reportId;
如果我省略了MinOccurs="0",
<xs:element name="queryId" type="xs:long" />
<xs:element name="reportId" type="xs:long" />
结果变成
public class ReportRequestWrapper {
protected long queryId;
protected long reportId;
我只是觉得这个很奇怪,想了解更多关于这个的信息。
不,这不是一个错误,因为当你说minOccurs = "0"
时,这意味着queryId
可能存在或不存在。
所以正如你所说的long
不可能是null
,所以如果没有Long
,就无法模拟它不存在的情况。
当您不指定minOccurs = "0"
时,这意味着无论值是什么(除了null
,即不存在),queryId
都将存在。因此,这种情况完全满足long
,而不需要Long
。