34.3. 枚举
概述
在 XML Schema 中,枚举类型是使用 xsd:enumeration
facet 定义的简单类型。与 atomic 简单类型不同的是,它们映射到 Java 枚举。
在 XML Schema 中定义枚举类型
枚举是使用 xsd:enumeration
facet 的简单类型。每个 xsd:enumeration
都会为枚举类型定义一个可能的值。
例 34.5 “XML Schema Defined Enumeration” 显示枚举类型的定义。它有以下可能的值:
-
big
-
large
-
mungo
-
gargantuan
例 34.5. XML Schema Defined Enumeration
<simpleType name="widgetSize"> <restriction base="xsd:string"> <enumeration value="big"/> <enumeration value="large"/> <enumeration value="mungo"/> <enumeration value="gargantuan"/> </restriction>
映射到 Java
在基础类型为 xsd:string
的 XML Schema enumerations 会自动映射到 Java enum
类型。您可以使用 第 38.4 节 “自定义枚举映射” 中描述的自定义,指示代码生成器将其他基本类型的枚举映射到 Java 枚举类型。
enum
类型创建如下:
类型的名称取自简单类型定义的
name
属性,并转换为 Java 标识符。通常,这意味着将 XML Schema 名称的第一个字符转换为大写字母。如果 XML Schema 名称的第一个字符是无效字符,则会在名称前带有下划线(
_
)。对于每个
枚举
面,会根据value
属性的值生成枚举常量。恒定的名称是通过将值中的所有小写字母转换为等效的大写。
- 生成构造器,它采用从枚举基础类型映射的 Java 类型。
生成名为
value ()
的公共方法,以访问由类型实例表示的 facet 值。value ()
方法的返回类型是 XML Schema 类型的基本类型。生成名为
fromValue ()
的公共方法,以根据 facet 值创建 enum 类型的实例。value ()
方法的参数类型是 XML Schema 类型的基本类型。-
该类通过
@XmlEnum
注释进行解码。
例 34.5 “XML Schema Defined Enumeration” 中定义的枚举类型映射到 例 34.6 “为 String Bases XML Schema 枚举生成枚举类型” 中显示的枚举类型。
例 34.6. 为 String Bases XML Schema 枚举生成枚举类型
@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); } }