XJC 生成整数而不是 int
Posted
技术标签:
【中文标题】XJC 生成整数而不是 int【英文标题】:XJC Generating Integer Instead of int 【发布时间】:2011-11-08 09:07:24 【问题描述】:以下架构应该在Value
类中生成两个原始int
字段,而是为元素 生成原始int
和为属性生成java.lang.Integer 。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/test" xmlns:test="http://www.example.com/test"
elementFormDefault="qualified">
<xsd:element name="values">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="test:value" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="value">
<xsd:complexType>
<xsd:sequence>
<!-- Is generated as primitive int -->
<xsd:element name="element" type="xsd:int" />
</xsd:sequence>
<!-- Is generated as java.lang.Integer -->
<xsd:attribute name="attribute" type="xsd:int" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
我已经查看了 JAXB documentation 中的任何内容,即属性和元素的生成方式可能不同,但一无所获。
谁能解释一下?是否有解决方法使属性生成为原始int
?
【问题讨论】:
【参考方案1】:我不完全确定这就是答案,但我在调试我的应用程序时顿悟了。
XML 架构中 元素 的默认多重性是 1..1 (required)
,而 属性 的默认多重性是 0..1 (optional)
。
因此,由于 元素 是 必需 并且 Java 中的原语具有默认值(很可能是 0),因此生成 @987654325 是有意义的@ 作为 Java 原语。
由于 属性 是 可选,因此它可能是 nillable
,而使用原语是不可能的。 java.lang.Integer 是 Object
,因此可以是 null
,因此将 <xsd:attribute type="xsd:int" />
生成为 java.lang.Integer 是有意义的。
如果您将属性设为必需 (<xsd:attribute type="xsd:int" use="required" />
),它将生成为原始int
。我还没有看到 JAXB 的文档明确说明了这一点,但这并不意味着它不存在;也许我只是错过了。
【讨论】:
以上是关于XJC 生成整数而不是 int的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 trunc() 而不是 int() 将浮点类型数转换为整数更好?
如何在javascript中进行整数除法(在int中获取除法答案而不是float)? [复制]