在 Eclipse 中生成 java 代码?

2022-09-03 15:18:25

有谁知道可以采取什么方法来自动生成Java源代码,例如从eclipse中的xml或json文件?

我正在考虑做的一个很好的例子是Google Android sdk所做的:他们有一个从资源自动生成的R类。

每次将资源文件保存在 Eclipse R 类中时,都会自动重新生成。

更新:示例:在文本(xml或json文件)中,我有以下内容:

 <tags>
     <tag id="ALPHA">
         <description>The first alpha tag.</description>
         <value>231232</value>
     </tag>
     <tag id="BETA">
         <description>This is the beta tag.</description>
         <value>231232</value>
     </tag>

然后在我生成的java类中,假设R,我会有这样的东西:

R.tags.ids.ALPHA //refers to an enum value for example
R.tags.values.ALPHA //refers to final int with avlue 231232
R.tags.descriptions.ALPHA //refers to the String with description

谢谢!


答案 1

我这样做的方式是,我有一个XSLT文件,它只是将我的xml数据(在我的情况下是协议规范)转换为java源代码。这种 XSLT 转换可以在 ANT 任务中轻松完成,该任务可以包含在 eclipse 的构建链中。

也许有一个用于此特定任务的插件。

一些有用的链接:


答案 2

我根据您的评论添加了另一个答案,也因为我不建议在Google Android Resource SDK之外执行此操作。Google基本上是使用静态类(单例)的层次结构作为其资源。您需要使 XSLT 生成静态成员变量,而不是 getter 和 setter。

我基本上采用了我的旧答案,并将其更改为所有成员变量的静态。您必须非常小心地执行此操作,因为我见过许多错误不正确地使用“静态”修饰符。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="/" priority="100">
    public class <xsl:value-of select="name(node())" /> {
        <xsl:apply-templates  select="child::node()" />
    }
    </xsl:template>
    <xsl:template match="/*/*">
        public static String <xsl:value-of select="name()" />;
        public static String get<xsl:value-of select="name()" /> {
            return <xsl:value-of select=" name()" />;
        }

        public void static set<xsl:value-of select="name()" />(String value) {
            <xsl:value-of select="name()" /> = value;
        }
    </xsl:template>
</xsl:stylesheet>

如果使用此示例 XML 进行处理:

<?xml version="1.0" encoding="UTF-8"?>
<Human>
    <EyeColor>brown</EyeColor>
    <HairColor>brown</HairColor>
</Human>

你得到这样的东西:公共类人类{

    public static String EyeColor;

    public static String getEyeColor {
        return EyeColor;
    }

    public static void setEyeColor(String value) {
        this.EyeColor = value;
    }


    public static String HairColor;
    public static String getHairColor {
        return HairColor;
    }

    public static void setHairColor(String value) {
        this.HairColor = value;
    }


}

推荐