首先,我想分享一下,我最近才开始使用Java和面向对象编程,所以如果这是一个愚蠢的问题,请原谅我,但我在其他地方找不到明确的答案。
我正在为 Comsol 模型开发一个模板,并希望缩写一部分代码以使其更具可读性。尽管以下代码段使用 Comsol 编译器运行:
Model model = ModelUtil.create("Model"); // Returns a model
model.geom().create("geom1"); // add a component
model.geom("geom1").create("circle") // add a shape
//I would like to rewrite the following block of code:
model.geom("geom1").shape("circle").name("c1", "Circle");
model.geom("geom1").shape("circle").feature("c1").label("OuterDiameter");
model.geom("geom1").shape("circle").feature("c1").set("type", "curve");
model.geom("geom1").shape("circle").feature("c1").set("r", "0.5");
我想将model.geom("geom1").shape("circle")
缩写为类似 MGS
.
我经常需要这样的命令,因为我也想用它来缩写model.material("mat1").propertyGroup("def")
和model.sol("sol1").feature("s1").feature("fc1")
,将来会model.result("pg2").feature("iso1")
和更多。
我更熟悉Python,它可以让我做一些非常简单的事情,比如:
MGS = model.geom("geom1").shape("circle")
MGS.name("c1", "Circle")
MGSF = MGS.feature("c1")
MGSF.label("OuterDiameter")
MGSF.set("type", "curve")
我在java中找不到任何类似的表达式。
谢谢
只需使用局部变量来存储重复访问的中间值。这不仅会使代码更具可读性,还可以提高效率,以防为获取中间值而调用的操作可能很昂贵。
大致如下:
Model model = ModelUtil.create("Model"); // Returns a model
Geom g = model.geom();
g.create("geom1"); // add a component
Component c = model.geom("geom1");
c.create("circle")
Circle ci = c.shape("circle");
ci.name("c1", "Circle");
Feature f = ci.feature("c1");
f.label("OuterDiameter");
f.set("type", "curve");
f.set("r", "0.5");
请注意,这只是一个定向示例,不打算仅通过复制和粘贴来工作。Geom
、Component
、Feature
和 Circle
类可能与您的方法的真实类名或实际返回类型不对应,我对代码使用的 API 的细节一无所知。