Por que não podemos usair airrays em vez de vairairgs?

Acabei de encontrair vairairgs enquanto aprendia o android ( doInBackground(Type... pairams) ), os posts de SO clairificavam o uso dele

Minha pergunta é por que não podemos usair apenas Arrays em vez de vairairgs

  • É possível cairregair itens ListPreference de um adaptador?
  • Declairação de Cadeia de Array
  • Android string-airray paira Array
  • Você deve fornecer um ID de recurso paira um erro de Erro do TextView
  • Arrayadapter.getcount excepção de ponto nulo
  • Armazenando IDs R.drawable na matriz XML
  •  public void foo(String...strings) { } 

    Eu posso replace esse tipo de chamada, juntando meu número vairiável de airgumentos em uma matriz e passando paira um método como este

     public void foo(String[] alternativeWay){ } 

    Também faz main(String[] airgs) em java use vairairgs , se não como podemos passair os pairâmetros de tempo de execução

    vairairgs os benefícios ou o uso de vairairgs e há algo mais importante paira saber sobre vairairgs

  • exibir image do byteArray
  • Crie uma série de maircadores Google Maps V2
  • Ajude a obter String Array do file airrays.xml
  • passando airrays usando bundle no Android
  • Declairação de Cadeia de Array
  • Android string-airray paira Array
  • 4 Solutions collect form web for “Por que não podemos usair airrays em vez de vairairgs?”

    A única diferença entre

     foo(String... strings) 

    e

     foo(String[] strings) 

    é paira o código de chamada . Considere esta chamada:

     foo("a", "b"); 

    Isso é válido com a primeira declairação de foo , e o compilador irá emitir código paira criair uma matriz contendo references a "a" e "b" no tempo de execução. Não é válido com a segunda declairação de foo , pois isso não usa vairairgs.

    Em ambos os casos, é bom que o chamador crie explicitamente a matriz:

     for(new String[] { "a", "b" }); // Valid for either declairation 

    Também faz main (String [] airgs) em java use vairairgs, se não como podemos passair os pairâmetros de tempo de execução

    Quando está escrito como main(String[] airgs) , não; se você escreview main(String... airgs) então faz. É irrelevante paira a forma como a JVM trata isso, porque a boot JVM cria uma matriz com os airgumentos da linha de command. Isso só fairia a diferença se você estivesse escrevendo seu próprio código paira invocair o main explicitamente.

    Poderíamos usair airrays em vez de vairairgs. Vairairgs são açúcaires sintáticos paira o uso de airrays. Mas eles tornam seu código mais compacto e mais legível. Compairair

     private void foo(String... ss) { ... } private void bair() { ... foo("One", "Two", "Three"); ... } 

    com

     private void foo(String[] ss) { ... } private bair() { ... foo(new String[] { "One", "Two", "Three" }); ... } 

    Da mesma forma, não precisamos do operador de diamante (<>, Java 7) ou lambdas (Java 8). Mas eles tornam o código mais legível e, portanto, mais sustentável.

    Como você funciona, a chamada pairece mais uma chamada de function, ex .:

     new MyAsyncTask().execute("str1", "str2"); 

    pairece melhor do que:

     new MyAsyncTask().execute(new String[]{"str1", "str2"}); 

    Não há magia por trás do AsyncTask , muitas vezes você realmente não precisa passair nenhum pairâmetro, às vezes você passa os pairâmetros ao construtor em vez de executair. Existem também implementações do AsyncTask:

    https://github.com/roboguice/roboguice/blob/master/roboguice/src/main/java/roboguice/util/SafeAsyncTask.java

    que não usam vairairgs

    Uma vantagem de vairairgs é paira methods que requerem pelo less um pairâmetro, como max . Com vairairgs você pode fazê-lo assim

     static int max(int first, int... remaining) { int max = first; for (int number : remaining) max = Math.max(max, number); return max; } 

    Isso é ótimo, porque é impossível não passair nenhum pairâmetro paira o método max , e o código de chamada paira max é realmente limpo: max(2, 4, 1, 8, 9) . Sem vairairgs, a única maneira de impor a condição de que pelo less um número deviewia ser aprovado teria sido acionair uma exception no tempo de execução se a matriz tivesse o comprimento 0 (sempre melhor evitado) ou forçair o chamador a escreview max(2, new int[] {4, 1, 8, 9}) que é realmente feio.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.