"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Puedo pasar una matriz como argumentos a un método Java con argumentos variables?

¿Puedo pasar una matriz como argumentos a un método Java con argumentos variables?

Publicado el 2025-03-25
Navegar:243

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

¿Puedo pasar una matriz como argumentos a un método con argumentos variables en java?

en java, métodos de aridad variable (métodos con argumentos variables) use una elipsis (...) para indicar que el método acepta un número variable de argumentos. Cuando pasa una matriz a un método de aridad variable, los elementos de la matriz se tratan como argumentos individuales a ese método.

Considere el siguiente código:

class A {
  private String extraVar;

  public String myFormat(String format, Object... args) {
    return String.format(format, extraVar, args);
  }
}

En este ejemplo, el método myFormat toma un número variable de argumentos (representados por ... args) y formatea una cadena usando el método String.Format. El problema es que Args se trata como una matriz [] de un solo objeto, en lugar de como argumentos individuales. Para abordar esto, puede aprovechar el hecho de que un t ... es azúcar sintáctica para un t [].

Java Language Specification 8.4.1 State:

"Si el último parámetro formal es un parámetro de aridad variable de Tipo T, se considera para definir un parámetro formal de tipo T []. El método es un método de aridad variable". Esto, el siguiente fragmento de código demuestra cómo pasar una matriz como argumentos a un método de aridad variable:

public static string ezFormat (objeto ... args) { Formato de cadena = nueva cadena (nueva char [args.length]). Reemplazar ("\ 0", "[ %s]"); return string.format (formato, args); } Public static void main (string ... args) { System.out.println (ezFormat ("a", "b", "c")); // imprime "[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 ]"
}

Método de aridad variable Gotchas

aprobando los valores null

cuando pase los valores null a un método de aridad variable, es importante ser consciente de que la última declaración en el siguiente ejemplo: [Ejemplo de ejemplo: [

[y] [&] [&] [y] [y] [Y] [Stater recuento vacío (objeto ... objs) { System.out.println (objs.length); } recuento (nulo, nulo, nulo); // imprime "3" recuento (nulo, nulo); // imprime "2" recuento (nulo); // lanza java.lang.nullpointerException !!!

... dará como resultado una nullpointerException. Para evitar esto, puede pasar el argumento nulo como una matriz separada o como un objeto, como este:
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!!!
cuenta (nuevo objeto [] {null}); // imprime "1" contar ((objeto) nulo); // Imprime "1"

agregando argumentos adicionales
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!!!
para agregar argumentos adicionales a una matriz que se pasa a un método de aridad variable, puede usar métodos de ayuda como append () y prepend () para modificar la matriz:

estatica t [] append (t [] Arr, T Lastelement)) final int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); arr [n] = LastElement; regresar 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; regresar arr; }

pasando matrices de primitivas

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)); // imprime "[[i@13C5982]" Entero [] mynumbers = {1, 2, 3}; System.out.println (ezFormat (mynumbers)); // imprime "[1] [2] [3]"

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3