2009-09-30 6 views
1

Je cherche un moyen de donner un tableau de java une valeur directement, en dehors de sa déclaration, par exempleJava tableau annoncez dehors définition de la variable

/*this works*/ 
int a[] = {1,2,3}; 

/*this doesn't*/ 
a = {1,2,3}; 

la motivation est donc qu'une méthode avec un tableau comme un argument peut être utilisé comme celui-ci

public void f(int a[]) { 
/*do stuff*/ 
} 

f({1,2,3}); 

au lieu de

int a[] = {1,2,3}; 
f(a); 
+2

Voulez-vous dire un tableau littéral? Cela semble n'avoir rien à voir avec la statique – Uri

+0

oui "tableau littéral" est le terme que je voulais. Je ne connaissais pas le nom correct – Mike

Répondre

7

Essayez:

a = new int[] {1,2,3}; 
0

Vous pouvez utiliser un bloc statique fais ce que tu cherches. Gardez à l'esprit que cela s'exécute la première fois que la classe est chargée.

private static int a[]; 

static { 
    a = new int[] {1,2,3}; 
    f(new int[]{1,2,3}); 
} 

public static void f(int a[]) { 
/// 
} 
+0

D'après les réponses, il semble que vous demandiez de déclarer un tableau non pas un tableau «statique». –

+0

oui. J'ai mal utilisé le mot statique, désolé – Mike

+0

"oui, j'ai mal utilisé le mot statique" - pouvez-vous nous dire la différence entre statique et référence? public void f (int a []) vous donne le tableau actuel au point de l'appel de méthode, que vous pouvez ensuite utiliser comme tableau réel. –

5

essayer:

a = new int[]{1,2,3}; 
+0

woah, creepy. = -o –

+0

Je déclare mon individualité via mes minuscules t – akf

+0

et l'absence d'espace entre ']' et '{'. je vais permettre nos différences. –

3

En général, vous pouvez dire

int[] a; 
a = new int[]{1,2,3}; 

 

public void f(int a[]) { ... } 

f(new int[]{1,2,3}) 

pour initialiser des tableaux à des endroits arbitraires dans le code.

3

Comme alternative plus propre, vous pouvez utiliser la fonctionnalité de paramètres variables, cela fonctionne toujours avec le passage dans un tableau trop - il est juste du sucre syntaxique.

public void f(int... a) { 
    /*do stuff*/ 
} 

public void test() { 
    f(1); 
    f(1,2,3); 
    f(new int[]{1,2,3}); 
} 
Questions connexes