"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Posso passar uma matriz como argumentos para um método Java com argumentos variáveis?

Posso passar uma matriz como argumentos para um método Java com argumentos variáveis?

Postado em 2025-03-25
Navegar:101

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

Posso passar uma matriz como argumentos para um método com argumentos variáveis ​​em java?

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"

adicionando argumentos extras

para adicionar argumentos extras a uma matriz que é passada para um método variável da arity, você pode usar métodos auxiliares como append () e precender () para modificar a matriz:

final int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); arr [n] = lastElement; retornar arr; } estático t [] prenda (t [] arr, t pirstElement) { final int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); System.arraycopy (arr, 0, arr, 1, n); arr [0] = FirstElement; retornar arr; }

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]"
Tutorial mais recente Mais>

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