搜索

34.3. 枚举

download PDF

概述

在 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 类型创建如下:

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

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

  2. 对于每个 枚举 面貌,根据 value 属性的值生成枚举常数。

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

  3. 生成构造器,以取自枚举的基本类型所映射的 Java 类型。
  4. 生成一个名为 value() 的公共方法,以访问由 类型的实例表示的 facet 值。

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

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

    value() 方法的参数类型是 XML 架构类型的基础类型。

  6. 该类使用 @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);
    }

}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.