java как справиться с перегрузкой вложенных функций и дублированием кода

#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();
    }
    
}