搜索

34.3. Enumerations

download PDF

概述

在 XML Schema 中,枚举的类型是使用 xsd:enumeration facet 定义的简单类型。与 atomic 简单类型不同,它们映射到 Java 枚举

在 XML Schema 中定义枚举类型

Enumerations 是使用 xsd:enumeration facet 的简单类型。每个 xsd:enumeration facet 为枚举类型定义一个可能的值。

例 34.5 “XML 架构定义枚举” 显示枚举的类型的定义。它有以下可能的值:

  • big
  • 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 Schema enumerations,其中基本类型为 xsd:string 会自动映射到 Java enum 类型。您可以使用 第 38.4 节 “自定义枚举映射” 中描述的自定义来指示代码生成器与其他基本类型的枚举映射到 Java enum 类型。

enum 类型创建如下:

  1. 类型的名称取自简单类型定义的 name 属性并转换为 Java 标识符。

    通常,这意味着将 XML 架构名称的第一个字符转换为大写字母。如果 XML 架构名称的第一个字符是无效字符,则名称前将加上下划线(_)。

  2. 对于每个 枚举 的问题,会根据 value 属性的值生成一个枚举常量。

    常数的名称通过将值中的所有小写字母转换为等效的大写来派生。

  3. 生成构造器,它将获取从枚举的基本类型映射的 Java 类型。
  4. 生成了一个名为 value () 的公共方法来访问由类型实例代表的 facet 值。

    value () 方法的返回类型是 XML Schema 类型的基本类型。

  5. 生成了一个名为 fromValue () 的公共方法,以根据 facet 值创建 enum 类型的实例。

    value () 方法的参数类型是 XML Schema 类型的基本类型。

  6. 类使用 @XmlEnum 注释进行解码。

例 34.5 “XML 架构定义枚举” 中定义的枚举类型映射到 例 34.6 “为 String Bases XML Schema Enumeration 生成 Enumerated Type” 中显示的 enum 类型。

例 34.6. 为 String Bases XML Schema Enumeration 生成 Enumerated Type

@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);
    }

}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.