#java #refactoring #overloading
Вопрос:
Отказ от ответственности:
Я из javascript/веб-фона.
Таким образом, следующее дублирование обычно не существует, но мне интересно, как перегрузка вложенных функций (вложенный полиморфизм) обрабатывается в Java и рассматривается ли это как дублирование кода.
Рассмотрим следующий пример псевдокода. Поэтому, пожалуйста, поправьте меня, если вам показалось, что вам не хватает информации.
Это специфическая функция цепочки, вызывающая у меня проблемы
.chain(typePoint, value)
значение может быть String
, int
, float
, long
public class Question {
// I cannot change the SpecObj, SpecSpec, they are 3rd party
public void questionFunction (int typeObj, int typePoint, String value) {
SpecObj specObj = new SpecObj.setup()
.chain(typeObj) //the dynamic part
.chain1()
.chain2()
.create();
SpecPoint specPoint = new SpecPoint.setup(specObj)
.chain(typePoint, value) // the dynamic part
.chain1()
.chain2()
.create();
}
// int
public void questionFunction (int type, int typePoint, int value) {
SpecObj specObj = new SpecObj.setup()
.chain(typeObj) // the dynamic part
.chain1()
.chain2()
.create();
SpecPoint specPoint = new SpecPoint.setup(specObj)
.chain(typePoint, value) // the dynamic part
.chain1()
.chain2()
.create();
}
}
Следующий способ инициализации объектов также разрешен,
и chaining function
порядок не имеет значения до тех пор, пока мы не вызовем create()
SpecObj.setup setup = new SpecObj.setup();
SpecPoint.setup setup = new SpecPoint.setup();
Итак, моя попытка заключается в следующем, но я все еще чувствовал, что она неоправданна/многословна с моими ограниченными возможностями.
Вопрос: Это лучшее, что я могу сделать из этого сценария?
public class Question {
// I cannot change the SpecObj
public void questionFunction (int typeObj, int typePoint, String value) {
SpecObj specObj = createSpecObj (typeObj);
SpecPoint specPoint = createSpecSetup(typeObj)
.chain(typePoint,value)
.create();
}
// float
public void questionFunction (int typeObj, int typePoint, float value) {
SpecObj specObj = createSpecObj (typeObj);
SpecPoint specPoint = createSpecSetup(typeObj)
.chain(typePoint, value)
.create();
}
// int
public void questionFunction (int typeObj, int typePoint, int value) {
SpecObj specObj = createSpecObj (typeObj);
SpecPoint specPoint = createSpecSetup(typeObj)
.chain(typePoint, value)
.create();
}
public SpecObj createSpecObj (int typeObj) {
return new SpecObj.setup()
.chain(typeObj)
.chain1()
.chain2()
.create();
}
public SpecSpec.setup createSpecSetup(int typeObj) {
return new SpecObj.setup(typeObj).chain1().chain2();
}
}