基于类中的现有字段自动生成Java代码



场景

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

例如,如果我要将一个新字段rho_m(一个简单的double)添加到我的类CModel中,我必须将其添加到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的术语,但没有背景知识来判断这是否是我想要的。

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

在您的场景中,您正在进行模型驱动的代码生成,也就是说,您有一个模型,并希望根据当前模型生成一些代码。因此,您需要一个模型驱动的代码生成器。

我负责ABSE/AtomWeaver项目,因此我将概述使用AtomWeafer可以做些什么来获得您想要的东西(然而,还有其他解决方案,如MetaEdit+、XText或Eclipse自己的GMT/EMF子系统)。

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

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

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

了解ABSE开发方法和AtomWeaver IDE的最好方法是下载IDE并查看示例或尝试教程。是的,你可以免费使用AtomWeaver。