2011-10-29 4 views
8

Pouvez-vous passer un nouveau tableau en tant que méthode et conserver des données dans ce tableau? Par exemple, j'ai cette méthode: foo(String[]), et je veux appeler comme foo(new String[] s = {"String1", "String2"}) Mais ce n'est pas Java valide.Arrays Java en tant que paramètres

Répondre

18

C'est « valide façon Java » (comme dans, il compile et fait ce que vous voulez):

foo(new String[] {"String1", "String2"}); 

Si vous avez la possibilité de changer cette méthode, puis vous pouvez aussi envisager de changer la méthode de prendre un argument varargs:

public void foo(String... strings) { 
    // ... 
} 

Ensuite, vous pouvez l'utiliser comme suit sans la nécessité de créer explicitement un tableau:

foo("String1", "String2"); 

Ce qui suit est alors aussi valide :

foo("String1"); 

et

foo("String1", "String2", "String3"); 

et plus encore.

+0

Comment obtenir le va alors? –

4

Si vous essayez de créer une variable locale s et de la conserver, non, vous ne pouvez pas déclarer une variable dans un appel de méthode. Vous devez déclarer la première en dehors de l'appel:

String[] s = {"String1", "String2"}; 
foo(s); 

Vous pouvez initialiser s dans l'appel, mais je ne vois aucune raison de le faire, plus il semble vraiment mauvais:

String[] s; 
foo(s = new String[] {"String1", "String2"}); 
1

Si vous voulez passer seulement la valeur et ne nécessitent plus la s variable le faire comme ceci:

foo(new String[] {"String1", "String2"}); 
0

Vous ne pouvez pas déclarer une variable, mais vous pouvez passer un tableau:

foo(new String[] { "String1", "String2" }); 

Si vous souhaitez référencer le même tableau ultérieurement, vous devez le déclarer avant l'appel.

0

Vous pouvez simplement faire foo (new String [] {"String1", "String2"})