我发现了一些非常奇特的东西,可能是微不足道的。当您在XSD中定义类型为xs:long
的元素,并且未设置minOccurs="0"
,并且通过JAXB运行它时,生成的元素的类型为long
。但是,当您在XSD元素中设置minOccurs="0"
时,结果元素的类型为Long
。请注意long
和Long
DataType
现在,通过我的工作,我做了一些if (thisVariable == null)
测试,当然,long
不能为空。 Long
可以。
* 我想知道的是,这是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>
queryId
和reportId
如下:
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;
我刚发现这很好奇,想要了解更多这方面的信息。
答案 0 :(得分:4)
不,这不是错误,因为当你说minOccurs = "0"
时,这意味着queryId
可能存在或不存在。
正如您所说,long
不能null
,因此如果没有Long
,就无法模拟不存在的情况。
当你没有指定minOccurs = "0"
时,这意味着无论价值(null
即不存在),queryId
将是当下。因此,此案例完全符合long
,并且不需要Long
。