Этот вопрос возник в ходе моего программирования работы; это не имеет отношения к текущей задаче, но мне все еще любопытно, есть ли у кого-нибудь ответ.
В Java 1.5 и выше вы можете иметь сигнатуру метода, используя переменное число аргументов, с синтаксисом многоточия:
public void run(Foo... foos) {
if (foos != null) {
for (Foo foo: foos) { //converted from array notation using autoboxing
foo.bar();
}
}
}
Предположим, я хочу выполнить некоторую операцию с каждым foo в списке foos, а затем делегировать этот вызов некоторому полю в моем объекте, сохраняя тот же API. Как мне это сделать? То, что я хочу, это:
public void run(Foo... foos) {
MyFoo[] myFoos = null;
if (foos != null) {
myFoos = new MyFoo[foos.length];
for (int i = 0; i < foos.length; i++) {
myFoos[i] = wrap(foos[i]);
}
}
run(myFoos);
}
public void run(MyFoo... myFoos) {
if (myFoos!= null) {
for (MyFoo myFoo: myFoos) { //converted from array notation using autoboxing
myFoo.bar();
}
}
}
Это не компилируется. Как я могу это сделать (передав переменное число MyFoo в метод run (MyFoo ...))?