У меня есть адаптация, целью которой является преобразование вызова аргумента переменной в заданный целевой объект. Пример кода показан ниже.Адаптировать переменные аргумента в Java к фиксированному аргументу в Java
class Adapter {
public Object execute(Object... args){
run(args);
//run2(args[0], args[1]);
//run3(args[0], args[1]);
}
private int run(int c, int d){
return c+d;
}
private int run(int a, float b){
return 0;
}
private String run(Integer a, String b){
return "ss";
}
private Object run(Object c, float m, int q){
return new Object();
}
..........
}
Метод выполнить() принимает переменную аргументы. Основываясь на элементе в args, адаптер выберет одну из runX с согласованным методом на исполнение. Например, run1 будет выбран, если первые два элемента в args оба являются int. Правило соответствия является:
args:{1,2} => run(int, int)
args:{new Integer(3), "asdas"} => run(Integer, String)
args:{new Object(), 4.0, 5} => run(Object, float, int)
.......
Есть хороший способ сделать это преобразование вызова в методе выполнения? В Java переменная args и Array идентичны. Невозможно выполнить итерацию каждого элемента в args, чтобы найти совпадающий метод запустите из-за слишком большого пространства комбинаций.
Требование приходит к API, который принимает переменный аргумент, говоря:
Object execute(Object... args)
Тогда я представил некоторые оптимизированные версии реализации для многих указанного рода случаев, когда классы элементов в аргументах.
но как бы он знал, какой метод вы хотите? – ergonaut
Это похоже на ужасный дизайн. Почему ты так делаешь? –
Если вам нужны именованные параметры, переключитесь на цель C или передайте хэш-карту. Перегрузка, как вы хотите, требует неприятностей. – ergonaut