125 votes

Weird "[]" après la signature de la méthode Java

J'ai regardé du code Java aujourd'hui, et j'ai trouvé une syntaxe bizarre:

 public class Sample {
  public int get()[] {
    return new int[]{1, 2, 3};
  }
}
 

Je pensais que cela ne peut pas compiler et que je voulais corriger ce que je pensais être une faute de frappe, mais je me suis souvenu que le compilateur Java l'avait effectivement accepté!

Quelqu'un peut-il m'aider s'il vous plaît à comprendre ce que cela signifie? Est-ce un tableau de fonctions?

114voto

Mehrdad Afshari Points 204872

C'est une méthode qui retourne un int[].

Java Langage De Spécification (8.4 Déclarations De Méthode)

Pour la compatibilité avec les anciennes versions de la plate-forme Java, un formulaire de déclaration pour une méthode qui retourne un tableau est autorisé à placer (certains ou tous) le vide support de paires que la forme de la déclaration du type de tableau après la liste des paramètres.

C'est pris en charge par la caducité de la production:

MethodDeclarator:
    MethodDeclarator [ ]

mais il ne doit pas être utilisé dans le nouveau code.

22voto

Costis Aivalis Points 8935

C'est une drôle de question. En Java, vous pouvez dire int[] a; , ainsi que int a[]; .
De ce point de vue, pour obtenir le même résultat, il suffit de déplacer le []
et écrivez public int[] get() { .
On dirait toujours que le code provient d'un obfuscateur ...

12voto

AProgrammer Points 31212

Comme il y a un tag C, je soulignerai qu'une notation similaire (mais pas identique) est possible en C et C ++:

 int tab[10];

int (*f())[10]
{
    return &tab;
}
 

Java n'a tout simplement pas besoin de l'étoile et de la parenthèse.

5voto

davin Points 19682

La syntaxe de java permet ce qui suit:

 int[] intArr = new int[0];
 

et aussi

 int intArr[] = new int[0];
 

qui semble plus flou venant de la syntaxe c-style.

ainsi, avec une fonction, le nom peut venir avant ou après le [], et le type est toujours int []

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X