34.3. 枚举
概述
在 XML 架构中,枚举的类型是一个简单的类型,它们使用 xsd:enumeration
t 进行定义。与原子简单类型不同的是,它们映射到 Java 枚举。
在 XML 架构中定义枚举的类型
枚举是一个使用 xsd:enumeration
facet 的简单类型。每个 xsd:enumeration
facet 定义枚举类型的一个可能值。
例 34.5 “XML 架构定义的枚举” 显示枚举类型的定义。它具有以下可能的值:
-
大
-
大
-
mungo
-
gargantuan
例 34.5. XML 架构定义的枚举
<simpleType name="widgetSize"> <restriction base="xsd:string"> <enumeration value="big"/> <enumeration value="large"/> <enumeration value="mungo"/> <enumeration value="gargantuan"/> </restriction>
映射到 Java
XML 架构枚举(基本类型为 xsd:string
)的 XML 架构枚举:字符串自动映射到 Java 枚举类型。您可以使用 第 38.4 节 “自定义枚举映射” 中描述的自定义方法指示代码生成器与其他基本类型集成器映射到 Java
enum
类型。
enum
类型创建如下:
类型的名称取自简单类型定义的
name
属性,并转换为 Java 标识符。通常,这意味着将 XML 架构名称的第一个字符转换为大写字母。如果 XML 架构名称的第一个字符是无效字符,则会在名称前加上一个 underscrore(
_
)。对于每个
枚举
面貌,根据value
属性的值生成枚举常数。恒定名称通过将值中的所有小写字母转换为其大写等效符来派生。
- 生成构造器,以取自枚举的基本类型所映射的 Java 类型。
生成一个名为
value()
的公共方法,以访问由 类型的实例表示的 facet 值。value()
方法的返回类型是 XML 架构类型的基本类型。生成名为
fromValue()
的公共方法,以根据 facet 值创建 enum 类型的实例。value()
方法的参数类型是 XML 架构类型的基础类型。-
该类使用
@XmlEnum
注释进行解码。
例 34.5 “XML 架构定义的枚举” 中定义的枚举类型映射到 例 34.6 “为字符串基础 XML 架构枚举的 Enumerated 类型” 中显示的 enum
类型。
例 34.6. 为字符串基础 XML 架构枚举的 Enumerated 类型
@XmlType(name = "widgetSize") @XmlEnum public enum WidgetSize { @XmlEnumValue("big") BIG("big"), @XmlEnumValue("large") LARGE("large"), @XmlEnumValue("mungo") MUNGO("mungo"), @XmlEnumValue("gargantuan") GARGANTUAN("gargantuan"); private final String value; WidgetSize(String v) { value = v; } public String value() { return value; } public static WidgetSize fromValue(String v) { for (WidgetSize c: WidgetSize.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); } }