Я бы предложил использовать Iterable
, Collection
или List
в качестве типа параметра.
ИМО, коллекции следует отдавать предпочтение ссылочным массивам. Если у вас есть массив Arrays.asList
, то преобразование выполняется хорошо. Arrays.asList
позволяет получить и установить обратно в массив, но, очевидно, не "структурные" модификации, которые могли бы изменить длину массива.
myFun(Arrays.asList(arr));
Возможно, вам придется использовать групповые символы в крайних / общих случаях.
public static void myFun(Iterable<? extends SomeClass> somethings) {
for (SomeClass something : somethings) {
// something is processed here
}
}
Примечательно, что Collections.toArray
и Arrays.asList
работают немного по-разному. asList
сохраняет исходный массив для поддержки коллекции, поэтому изменения в коллекции будут отражены в массиве. Collections.toArray
делает (мелкую) копию данных сбора. Создание копии часто является тем, что вы хотели бы в любом случае, если вы возвращаете массив. Асимметрично, если вы передаете в качестве аргумента, вы обычно не копируете (если не сохраняете как поле).