使用codemodel生成Java代码
例子
JCodeModel cm = new JCodeModel(); JDefinedClass dc = cm._class("foo.Bar"); dc.annotate(cm.ref("org.springframework.stereotype.Repository")).param("value", "apnService"); dc.field(JMod.PRIVATE + JMod.STATIC, cm.parseType("String"), "staticVar", JExpr.lit("abc")); dc.field(JMod.PUBLIC + JMod.STATIC + JMod.FINAL, cm.INT, "MAX_ARRAY_SIZE", JExpr.lit(25)); JArray array = JExpr.newArray(cm.parseType("String")); // 创建类型为数组 dc.field(JMod.PUBLIC + JMod.STATIC + JMod.FINAL, cm.parseType("String[]"), "SORTS", array); array.add(JExpr.lit("createdAt")); array.add(JExpr.lit("updatedAt")); JMethod m = dc.method(0, int.class, "foo"); m.body()._return(JExpr.lit(5)); JMethod m2 = dc.method(JMod.PUBLIC, cm.VOID, "bar"); m2.javadoc().add("This method will say Hello to the name."); m2.annotate(Override.class); m2.annotate(cm.ref("javax.ws.rs.GET")); m2.annotate(cm.ref("javax.ws.rs.Path")).param("value", "/getCustomerInfo").param("name", "appPushMessageMapper"); JBlock block = m2.body(); JType type = cm.parseType("String"); JVar var = block.decl(type, "fieldVar"); JVar var1 = block.decl(type, "fieldVar1", JExpr.lit("test")); JType typeMap2 = cm.ref("java.util.Map").narrow(cm.ref("String"), cm.ref("Object")); JType typeMap3 = cm.ref("java.util.HashMap").narrow(cm.ref("String"), cm.ref("Object")); block.decl(typeMap2, "map", JExpr._new(typeMap3)); JAnnotationUse ja; JMethod m3 = dc.method(JMod.PUBLIC, cm.parseType("String"), "get"); JVar jv = m3.param(cm.parseType("String"), "id"); ja = jv.annotate(cm.ref("Param")).param("value", "id"); jv = m3.param(cm.ref("java.lang.String"), "site"); ja = jv.annotate(cm.ref("javax.jws.WebParam")); // construct a Map<String, Integer> JType typeMap = cm.ref("java.util.Map").narrow(cm.ref("String"), cm.ref("Object")); jv = m3.param(typeMap, "args"); ja = jv.annotate(cm.ref("Param")).param("value", "params"); File file = new File("d:/home/tomcat/code/"); file.mkdirs(); cm.build(file);
分类:
Java
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程