em java, variável ARITY Methods (métodos com variável) use e elipsis (...) para indicar que os métodos (&&] (métodos com os métodos) usem e os denumentos de arity. Quando você passa uma matriz para um método de arity variável, os elementos da matriz são tratados como argumentos individuais para esse método. Extravar de String Private; public string myformat (formato de string, objeto ... args) { return string.format (formato, extravar, args); } }
Neste exemplo, o método MyFormat pega um número variável de argumentos (representados pelos ... args) e formata uma string usando o método string.format. A questão é que o ARGS é tratado como uma única matriz de objeto [], e não como argumentos individuais. Para resolver isso, você pode aproveitar o fato de que um t ... é açúcar sintático para um t []. Isso, o snippet de código a seguir demonstra como passar uma matriz como argumentos para um método variável de arity:
class A { private String extraVar; public String myFormat(String format, Object... args) { return String.format(format, extraVar, args); } }
Neste exemplo, o método ezformat pega um número variável de argumentos e retorna uma string formatada. Como String.Format também é um método de aridade variável, cada argumento passado para o ezformat é tratado como um argumento individual para string.format.
Método da arity variável Gotchas
Passando valores nulos
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 ]" }
count (novo objeto [] {null}); // Imprime "1" contagem ((objeto) nulo); // imprime "1"
Passando matrizes de primitivos
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!!!métodos variáveis de arity funcionam apenas com tipos de referência. O AutoBoxing não se aplica a matrizes de primitivas. Para passar uma variedade de primitivas, você deve primeiro convertê -las em uma matriz do tipo de invólucro:
int [] mynumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // imprime "[[i@13C5982]" Inteiro [] mynumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // imprime "[1] [2] [3]"
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3