gpt4 book ai didi

java - 是否可以使用 .txt 或 .xml 文件创建带有参数的枚举?

转载 作者:行者123 更新时间:2023-12-02 11:37:00 25 4
gpt4 key购买 nike

我想使用文件创建一个枚举类。我希望让维护变得更容易。

txt 示例:

//枚举实例的名称并用“-”分隔是参数值:

JOHN-23
ANNA-19

xml 示例:

<friends>
<friend name="JOHN">
<age>23</age>
</friend>
<friend name="ANNA">
<age>19</age>
</friend>
</friends>

我想要一个像这样的枚举行为:

enum Friends {
JOHN(23),
ANNA(19);

private int age;

Friends(int age) {
this.age = age;
}
}

最佳答案

可以通过 XSLT 转换来完成此操作并调用 SAXON通过构建系统中的任务。

例如将其应用到示例 XML 将生成示例枚举代码

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="text" indent="no"/>

<xsl:variable name="classname"><xsl:sequence select="concat(upper-case(substring(/*/local-name(),1,1)), substring(/*/local-name(), 2), ' '[not(last())])"/> </xsl:variable>

<xsl:template match="/*">
enum <xsl:value-of select="$classname"/>
{<xsl:for-each select="*"><xsl:if test="position()!=1">,</xsl:if><xsl:text>
</xsl:text><xsl:value-of select="@name"/>(<xsl:for-each select="*"><xsl:if test="position()!=1">, </xsl:if><xsl:value-of select="text()"/></xsl:for-each>)</xsl:for-each>;

<xsl:for-each select="*[1]/*"> private int <xsl:value-of select="local-name()"/>;
</xsl:for-each><xsl:text>
</xsl:text><xsl:value-of select="$classname"/>(<xsl:for-each select="*[1]/*"><xsl:if test="position()!=1">, </xsl:if>int <xsl:value-of select="local-name()"/></xsl:for-each>)
{
<xsl:for-each select="*[1]/*"> this.<xsl:value-of select="local-name()"/> = <xsl:value-of select="local-name()"/>;
</xsl:for-each> }
}
</xsl:template>
</xsl:stylesheet>

但是,

  • 如果 XML 的每个枚举值的参数数量不同,它就会崩溃。
  • 您的输入将类型名称和字段名称编码为元素名称,而元模型将它们编码为属性更容易
  • 为显式信息编写转换比为隐式信息编写转换更容易(即,假设您有一个 int Age 参数,而不是恰好有内容为十进制数字字符串的 Age 元素)
  • 如果您继续处理更复杂的事情,例如生成类的层次结构,则解决重载和继承的查询会快速超越简单的 XSLT

关于java - 是否可以使用 .txt 或 .xml 文件创建带有参数的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com