问题标签 [sun-codemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1565 浏览

java - Codemodel:在循环中生成泛型类型 .narrow()?

我正在使用 sun-codemodel 生成代码。我对泛型有疑问。我知道要生成类似的东西

我需要使用

但是,如何为不止一种泛型类型创建更通用的东西?

我想在循环中执行它,以便它支持自定义类中的任意数量的参数,但对于如下代码:

输出是这样的:

0 投票
2 回答
866 浏览

java - 在方法中重用时如何获取类的泛型“T”

我正在为 Fluent API 构建代码生成器。我想为每个现有的(POJO)类创建一个新类。我没有控制现有的课程。我通过反射解析现有方法,如果遇到 setter 或“add”方法,我会在我的 Fluent-Wrapper 类中为此创建一个方法,所以我可以说 child().values(....).get ()。

这适用于简单的参数。我花了一段时间才弄清楚如何处理 ParameterizedTypes,但我现在可以处理它了。我没有得到的是如何为泛型参数创建一个具体方法,该方法的类型不是在方法本身上定义,而是在包含类上。

我有这样的事情:

现在我尝试通过 JCodeModel 生成代码,需要解析参数“values”的类型。问题:我得到一个包含 List 和 TypeVariable "T" 的 ParameterizedType。但我无法将“T”映射回字符串。但我无法弄清楚如何通过实现“Child”来获得具体的“T”类型。任何人?

澄清:我这样做,当涉及到“TypeVariable”的情况时,不需要“T”而是“String”

0 投票
1 回答
1305 浏览

java - Sun CodeModel - 如何创建具有多个参数的枚举

我想使用 Sun 的代码模型创建一个类似于以下代码片段的枚举类

我能够为枚举的构造函数、字段和 getter 方法生成代码。但是,我无法用三个值初始化枚举常量。JDefinedClass 有一个方法 enumConstant,它只接受枚举常量的名称作为参数。我也通读了 JEnumConstant 类的文档,但找不到任何可以向枚举常量添加三个值的内容。

0 投票
1 回答
486 浏览

java - 使用 CodeModel Java API 覆盖注释

如何@Override使用 codeModel 向我的方法添加注释?

我没有找到@Override课程。

0 投票
1 回答
3426 浏览

java - 如何使用 CodeModel 从 2 级抽象超类调用方法?

我正在使用 CodeModel 2.6。

当 getType() 方法继承自抽象超类时,我将如何生成这条指令,比 JDefinedClass 高两层?

背景:

  1. assertEquals(...) 方法来自“import static org.junit.Assert.assertEquals;”
  2. 类层次结构是
    • GeneraldocumenMetadata 扩展了 ItemMetadata
    • ItemMetadata 扩展 AbstractItemMetadata
    • AbstractItemMetadata 拥有 getType() 方法和私有类型字段

最终结果/所需方法如下:

CodeModel 方法目前看起来像这样,但是 "definedClass.getMethod("getType", new JType[] {}); "返回 null

0 投票
5 回答
2745 浏览

java - Java Codemodel - 注释方法或类

我正在使用 CodeModel 以编程方式生成 .java 文件。这是创建方法的代码片段:

当我运行时(假设所有其他必要的代码都在那里);

但我想像这样注释上面的方法:

为此我尝试了以下方法: method.annotate(...) and method.annotate2(...)

但是这些方法只接受类文件作为参数(即像 SomeClass.class 形式),但我希望能够将字符串作为参数,并且该类将在运行时动态可用。

说我应该能够这样做:method.annotate("Path").

谁能帮我?

0 投票
1 回答
182 浏览

java - 代码模型 / arg 参数中的引号 (")

我尝试在 codemodel(Sun) 中创建下一个表达式:

所以 whatToclick 将是我函数中的一个参数。

所以我写了下一个:

我有两个问题:

  1. 我没有成功将 whatToClick 作为参数。它总是在引号中(因为我的表达式是一个字符串,我必须放/",否则它会关闭字符串。)

  2. 表达式是在没有click()零件的情况下创建的。

有什么帮助吗?

0 投票
1 回答
2074 浏览

java - 如何使用 codemodel 库生成循环和条件

我一直在尝试学习如何使用 Suns代码模型库,但我对生成for 循环和 if-else 块感到非常困惑。我正在为如何为 if-else 块和 for 循环生成条件而苦苦挣扎,同时也在为如何生成它们的主体而苦苦挣扎。

例如:

对于循环:

0 投票
2 回答
381 浏览

java - Codemodel Java 库 - 初始化二维数组

只是尝试使用 Sun 的 codemodel 库声明和初始化一个二维数组,但我遇到了一些问题。我试过了:

输出:

但我似乎无法找到填写最后一个 [ ] 的方法。我尝试了几种变体。

更具体地说,我需要能够使用以下内容进行初始化:

JExpr.ref() 似乎不适用于此。

任何帮助,将不胜感激。谢谢

0 投票
2 回答
258 浏览

code-generation - CodeModel / Jinvocation 与 JMethod.body()

我有下一个 JInvocation:

哪里anotherPageInstanceJVar和方法是JMethod

我对此做了一些操作JInvocation,然后我想将它添加到test.body().invoketest 所在的位置JMethod

主要问题是我不能,因为test.body().invoke没有选择JInvocation作为参数。

我可以做下一个: test.body().invoke(anotherPageInstance, method),但这对我没有帮助,因为我想保存JInvocation,并且当某些情况发生时,将其添加Jinvocation到正文中(正如我之前提到的,同时我对此做了一些操作JInvocation)。

有什么帮助吗?