【问题标题】:Automatically generate Java code based on existing fields in a class根据类中的现有字段自动生成 Java 代码
【发布时间】:2012-08-17 17:12:22
【问题描述】:

场景

我正在使用在 Eclipse 中从头开始构建的 Java 模型。在这个模型中重要的是我们将输出保存到 MATLAB (.mat) 文件中。我不断添加新功能,这些新功能需要新字段,而这些新字段又必须在每次迭代时导出到 .mat 文件中。重新启动崩溃的模拟后,我可能必须导入 .mat 文件。要导出或导入我的 .mat 文件,我使用 JMatIO

例如,如果我要在我的 CModel 类中添加一个新字段 rho_m(一个简单的 double),我必须添加到我的 Save() 方法中:

mlModel.setField("rho_m", new MLDouble(null, new double[] {rho_m}, 1));

对于我的 Load() 方法:

rho_m = ((MLDouble)mlModel.getField("rho_m")).getReal(0);

请注意,即使 rho_mdouble,在 JMatIO 中也需要将其视为 double[]。这可能与 MATLAB 面向矩阵和矩阵运算有关。

问题

我想自动执行此过程,而不是手动执行此操作(容易出错,维护烦人)。理想情况下,我希望我的 IDE 检测 CModel 中的所有字段并根据字段的名称和类型编写代码。有没有办法在 Java/Eclipse 中做到这一点?

目前的想法

我没有接受过低级编程语言的正式培训(是的,Java 对我来说是低级的)并且对 Java 还是比较陌生。我确实有一些使用 MATLAB 的经验。在 MATLAB 中,我想我可以在 for 循环中使用 eval()fieldnames() 来执行我提到的操作。我最后的手段是将 Java 代码复制粘贴到 MATLAB 中,然后使用一个巨大而丑陋的脚本从那里生成代码。每次我想对模型进行更改时,我都会重新运行 MATLAB 脚本。

除了这个想法之外,我还找到了诸如 UML 之类的术语,但没有背景知识来确定这是否是我正在寻找的。​​p>

任何帮助,即使只是朝着正确方向的一小步,我们都将不胜感激。如果我需要进一步澄清任何事情,请告诉我。

【问题讨论】:

  • 关于我的解决方案的一点更新:我查看了 Eclipse 插件,它们看起来要么太复杂(协作选项、付费版本等)要么已经过时。我最终在 MATLAB 中编写了自己的“代码生成器”。 MATLAB 读取文件,使用正则表达式过滤掉 cmets、名称和类型,然后编写可以复制粘贴到模型的 Save 和 Load 方法中的源代码。

标签: java code-generation


【解决方案1】:

看你的场景,你正在做模型驱动的代码生成,也就是说,你有一个模型,想要得到一些根据你当前的模型生成的代码。因此,您需要一个模型驱动的代码生成器。

我领导 ABSE/AtomWeaver 项目,所以我将概述您可以做些什么来使用 AtomWeaver 获得您想要的(不过还有其他解决方案,如 MetaEdit+、XText 或 Eclipse 自己的 GMT/EMF 子系统)。

AtomWeaver 是一个 IDE,您可以在其中构建模型并从该模型生成代码。您可以根据需要多次更改模型,然后单击“生成”按钮以获取代码的更新版本。 ABSE是建模方法的名称。

我们不需要详细说明,但基本上 ABSE 遵循“构建块”方法。您创建一个模板来表示模型的特征或概念。然后,您可以将迷你代码生成器与该概念相关联。然后,您可以“实例化”并结合这些构建块来快速构建您的模型。变量增加了模型的灵活性。

您还可以更改模型,或添加新功能(“块”)并再次生成。生成器是使用 Lua 编程语言构建的,这是一种非常简单的语言,具有类似 C 的语法。

了解ABSE development methodAtomWeaver IDE 的最佳方式是下载IDE 并查看示例或尝试教程。是的,您可以免费使用 AtomWeaver。

【讨论】:

  • 感谢您的解释。所以流行语是模型驱动的代码生成器。由于我已经在 Eclipse 中工作,我将看看 GMT 和 EMF
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2011-05-14
  • 2020-09-30
相关资源
最近更新 更多