JaxB 在从 XSD 生成枚举时添加 undescore(_)

作者:编程家 分类: xml 时间:2025-05-09

使用JaxB从XSD生成枚举时,我们可以通过添加underscore(_)来提高生成的代码的可读性和可维护性。这种命名约定在枚举成员之间插入下划线,使得每个成员都以独立的单词形式出现,更符合自然语言的书写习惯。在本文中,我们将探讨如何使用JaxB生成带有underscore的枚举,并提供一个案例代码来说明这一点。

在JaxB中,我们可以通过在XSD文件中使用annotation来指定生成枚举时是否添加underscore。具体来说,我们可以在XSD文件的enum类型定义中添加一个命名约定的annotation,如下所示:

xml

在上述代码中,我们在每个枚举成员的annotation中添加了一个`jaxb:typesafeEnumMember`元素,并指定了成员的名称。这将告诉JaxB在生成枚举类时使用指定的名称,并在成员之间插入下划线。

接下来,我们可以使用JaxB的XJC工具来生成Java类。假设我们将上述XSD文件保存为`Color.xsd`,我们可以使用以下命令来生成Java类:

shell

xjc -d src -p com.example Color.xsd

上述命令将生成一个名为`com.example.Color`的Java枚举类,其中的枚举成员将以带有下划线的形式命名,如下所示:

java

package com.example;

import javax.xml.bind.annotation.XmlEnum;

import javax.xml.bind.annotation.XmlEnumValue;

import javax.xml.bind.annotation.XmlType;

@XmlType(name = "Color")

@XmlEnum

public enum Color {

@XmlEnumValue("RED")

RED("RED"),

@XmlEnumValue("GREEN")

GREEN("GREEN"),

@XmlEnumValue("BLUE")

BLUE("BLUE");

private final String value;

Color(String v) {

value = v;

}

public String value() {

return value;

}

public static Color fromValue(String v) {

for (Color c: Color.values()) {

if (c.value.equals(v)) {

return c;

}

}

throw new IllegalArgumentException(v);

}

}

案例代码

现在让我们来看一个简单的案例代码来演示如何使用JaxB生成带有underscore的枚举。

假设我们有一个名为`Fruit`的XSD文件,其中定义了一个名为`FruitType`的枚举类型:

xml

我们可以使用以下命令来生成Java类:

shell

xjc -d src -p com.example Fruit.xsd

生成的Java枚举类如下所示:

java

package com.example;

import javax.xml.bind.annotation.XmlEnum;

import javax.xml.bind.annotation.XmlEnumValue;

import javax.xml.bind.annotation.XmlType;

@XmlType(name = "FruitType")

@XmlEnum

public enum FruitType {

@XmlEnumValue("APPLE")

APPLE("APPLE"),

@XmlEnumValue("BANANA")

BANANA("BANANA"),

@XmlEnumValue("ORANGE")

ORANGE("ORANGE");

private final String value;

FruitType(String v) {

value = v;

}

public String value() {

return value;

}

public static FruitType fromValue(String v) {

for (FruitType c: FruitType.values()) {

if (c.value.equals(v)) {

return c;

}

}

throw new IllegalArgumentException(v);

}

}

上述代码中的枚举成员名称以带有下划线的形式命名,符合了命名约定。

通过在XSD文件中使用JaxB的annotation,我们可以指定生成枚举时添加underscore的规则。这种命名约定可以提高生成的代码的可读性和可维护性,使其更符合自然语言的书写习惯。在本文中,我们讨论了如何使用JaxB生成带有underscore的枚举,并提供了一个案例代码来说明这一点。在实际开发中,我们可以根据需要选择是否使用这种命名约定来生成更易于理解和维护的枚举类。