«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Могу ли я передать массив в качестве аргументов с методом Java с переменными аргументами?

Могу ли я передать массив в качестве аргументов с методом Java с переменными аргументами?

Опубликовано в 2025-03-25
Просматривать:568

Can I Pass an Array as Arguments to a Java Method with Variable Arguments?

Могу ли я передать массив в качестве аргументов методу с переменными аргументами в Java?

в 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

прохождение нулевых значений

при передаче значений NULL к методу переменной Arity, важно знать, что последнее утверждение в следующем примере: void count (объект ... objs) { System.out.println (objs.length); } граф (нулевой, нулевой, нулевой); // Отпечатки "3" счет (нулевой, нулевой); // Отпечатки "2" счет (нулевой); // бросает java.lang.nullpointerexception !!!

... приведет к 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"

static append (t [] arr окончательный int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); arr [n] = lastelement; возврат Arr; } static t [] Prepend (t [] arr, t firstElement) { окончательный int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); System.ArrayCopy (ARR, 0, ARR, 1, N); arr [0] = FirstElement; возврат Arr; }

прохождение массивов примитивов

static  T[] 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;
}

int [] mynumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // печатает "[[i@13C5982]" Integer [] mynumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // печатает "[1] [2] [3]"

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3