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