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
... 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:
pasando matrices de primitivas
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; }
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