代码之家  ›  专栏  ›  技术社区  ›  Andriy Drozdyuk Pickels

在Eclipse中生成java代码?

  •  15
  • Andriy Drozdyuk Pickels  · 技术社区  · 14 年前

    有人知道在eclipse中自动生成Java源代码(例如从xml或json文件)的方法吗?

    我正在考虑做的一个很好的例子是googleandroidsdk所做的:它们有一个从 resources

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

    更新:示例:

     <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>
    

    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
    

    谢谢!

    7 回复  |  直到 14 年前
        1
  •  3
  •   Adam Gent    14 年前

    我根据你的评论添加了另一个答案,也是因为我不建议在googleandroid资源SDK之外做这件事。 Google的资源基本上是使用静态类(singleton)的层次结构。

    我基本上采用了我以前的答案,并将所有成员变量都改为static。

    <?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;
        }
    
    
    }
    
        2
  •  4
  •   aioobe    14 年前
        3
  •  2
  •   Chaitannya    14 年前

    Eclipse建模框架(EMF)适用于您所期待的应用程序。 JET (Java发射器模板)您可以在这里查看更多详细信息。

    还有eclipse引入的较新的XPand框架,

    这里的模型是指XML-XSLT/UML(RationalRose)模型。

        4
  •  1
  •   Community CDub    7 年前
        5
  •  1
  •   Fabian Steeg    14 年前

    您可以看看Eclipse建模项目的 model to text components

        6
  •  1
  •   Adam Gent    14 年前

    从XML到JAVA,反之亦然,我强烈推荐JAXB。

    您可以使用jaxb2.0或更高版本从模式生成Java源代码。 或者可以从Java生成模式。

    您还可以使用Jettison轻松地让JAXB生成/使用JSON。

    您还可以让JAXB以Martin-Fowler-Fluent风格生成POJO,或者使用其插件系统以各种不同的方式生成POJO。

    根据您的评论进行编辑: 让XSLT生成JAXB POJO:

    <?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">
        import javax.xml.bind.annotation.XmlRootElement;
    
        @XmlRootElement(name="Human")
        public class <xsl:value-of select="name(node())" /> {
            <xsl:apply-templates  select="child::node()" />
        }
        </xsl:template>
        <xsl:template match="/*/*">
            private String <xsl:value-of select="name()" />;
            public String get<xsl:value-of select="name()" /> {
                return <xsl:value-of select=" name()" />;
            }
    
            public void set<xsl:value-of select="name()" />(String value) {
                this.<xsl:value-of select="name()" /> = value;
            }
        </xsl:template>
    </xsl:stylesheet>
    

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

    你会得到这样的结果:

    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name="Human")
    public class Human {
    
    
        private String EyeColor;
        public String getEyeColor {
            return EyeColor;
        }
    
        public void setEyeColor(String value) {
            this.EyeColor = value;
        }
    
    
        private String HairColor;
        public String getHairColor {
            return HairColor;
        }
    
        public void setHairColor(String value) {
            this.HairColor = value;
        }
    
    
    }
    
        7
  •  0
  •   Rupeshit    14 年前

    是的,您可以使用xml文件来完成。创建您自己的xml文件模板,然后使用首选项java代码模板导入选择该文件并使用该模板。