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 pouvait pas comstackr 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?

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

Spécification du langage Java (déclarations de méthode 8.4)

Pour la compatibilité avec les anciennes versions de la plate-forme Java, un formulaire de déclaration pour une méthode qui renvoie un tableau est autorisé à placer (tout ou partie) les paires de crochets vides qui constituent la déclaration du type de tableau après la liste des parameters.

Ceci est soutenu par la production obsolète:

MethodDeclarator :
MethodDeclarator []

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

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

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

Ici, la fonction f renvoie un pointeur sur un tableau de 10 ints.

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

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

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 []