Сокращение длинной цепочки объектов (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.

Спасибо

1 ответ

Решение

Просто используйте локальные переменные для хранения промежуточных значений, к которым осуществляется повторный доступ. Это не только сделает код более читабельным, но и повысит эффективность в случае, если операции, вызываемые для получения промежуточных значений, могут быть дорогими.

Что-то вроде:

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, который использует ваш код.

Другие вопросы по тегам