Причина проста: переменный параметр arity является просто параметром массива старой школы с некоторыми дополнительными метаданными, которые сообщают компилятору предоставить некоторый синтаксический сахар (а именно, он позволяет неявное создание массива).
Итакс точки зрения JVM Object...
в значительной степени совпадает с Object[]
.Разрешение коллекций также потребовало бы более инвазивного изменения в JVM (которая на данный момент не имеет явной поддержки коллекций).
Обратите внимание, что если вы хотите поддерживать оба способа, то создание метода на основе коллекции, вероятно,лучший подход:
public void frobnicate(Object... args) {
frobnicate(Arrays.asList(args));
}
public void frobnicate(Iterable<Object> args) {
// do stuff
}
Причина этого заключается в том, что использование Arrays.asList()
является обычно более дешевой операцией, чем Collection.toArray()
(поскольку она создает простую оболочку).