в Java, Методы переменной (методы с переменными аргументами) Используйте элипс (...), чтобы указать, что метод принимает вариабельный номер аргумента. Когда вы передаете массив методу переменной, элементы массива рассматриваются как отдельные аргументы с этим методом.
рассмотрим следующий код:
class A { private String extraVar; public String myFormat(String format, Object... args) { return String.format(format, extraVar, args); } }
В этом примере метод MyFormat принимает переменное количество аргументов (представленных ... args) и форматирует строку, используя метод string.format. Проблема заключается в том, что ARG рассматривается как один объект [] массив, а не как отдельные аргументы. Чтобы решить эту проблему, вы можете использовать тот факт, что T ... является синтаксическим сахаром для A T [].
Java Language Speciation 8.4.1 Состояния:
«Если последний формальный параметр является переменным параметром ARITY типа T, это считается определяющим формальным параметром типа T []. Метод, который тогда является методом. Иллюстрируйте это, следующий фрагмент кода демонстрирует, как передать массив в качестве аргументов методу переменной Arity:
public Static String ezformat (Object ... args) { String format = new String (new char [args.length]). Reply ("\ 0", "[ %s]"); return string.format (format, args); } public static void main (string ... args) { System.out.println (ezformat ("a", "b", "c")); // печатает "[a] [b] [c]" }
public static String ezFormat(Object... args) { String format = new String(new char[args.length]).replace("\0", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }
Метод переменной arity gatchas
... приведет к nullpointerexception. Чтобы избежать этого, вы можете передать нулевый аргумент в качестве отдельного массива или как объект, например,:
static void count(Object... objs) { System.out.println(objs.length); } count(null, null, null); // prints "3" count(null, null); // prints "2" count(null); // throws java.lang.NullPointerException!!!]
добавление дополнительных аргументов
count(new Object[] { null }); // prints "1" count((Object) null); // prints "1"
прохождение массивов примитивов
staticT[] append(T[] arr, T lastElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N 1); arr[N] = lastElement; return arr; } static T[] prepend(T[] arr, T firstElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N 1); System.arraycopy(arr, 0, arr, 1, N); arr[0] = firstElement; return arr; }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3