缩写长对象链 (java)

Abbreviating long object chain (java)

首先,我想分享一下,我最近才开始使用 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");

请注意,这只是一个定向示例,并非旨在仅通过复制和粘贴来工作。 GeomComponentFeatureCircle class 可能与真正的 class 名称或实际的 return 类型不对应你的方法,我不知道你的代码正在使用的 API 的细节。