2012-04-08 6 views
2

Dies wurde von einem Freund gefragt. Merkwürdigerweise kompiliert und läuft dieser Java-Code richtig.Seltsames Verhalten in Java

int getArray() [] { ... } 

Ich vermisse etwas hier. getArray() ist eine Funktion, die hier ein Integer-Array zurückgibt: Sollte es nicht

int[] getArray() { ... } 

EDIT sein.

+0

mögliche Duplikate von [Java - Array-Klammern nach Variablenname] (http://StackOverflow.com/Questions/7521891/Java-Array-Brackets-nach-Variablen-Name) –

+3

@KirkWoll: Das ist ein anderes Szenario , IMO. –

Antwort

9

Von section 8.4 of the JLS:

Für die Kompatibilität mit älteren Versionen der Java SE Plattform, die Erklärung eines Verfahrens, das ein Array zurückgibt darf Ort (einige oder alle) die leeren Paare Halterung Diese bilden die Deklaration des Array-Typs nach der formalen Parameterliste. Dies wird durch die folgende veraltete Produktion unterstützt, sollte aber nicht in neuem Code verwendet werden.

Während ich gelegentlich eine Variablendeklaration mit den Array-Spezifizierer nach dem Namen (ick) sehen habe ich nie es für eine Methode Erklärung wie folgt verwendet gesehen. Seltsam.

2

Beide Syntaxen für ein Array deklarieren sind äquivalent in Java, gemäss Abschnitt §10.2 der Java Language Specification:

int[] array; 
int array[]; 

Das gleiche gilt für den Rückgabetyp einer Methode true, gemäss Abschnitt §8.4 von die JSL, wie in Jon Skeets Antwort zitiert.

int[] getArray() { ... } 
int getArray()[] { ... } 
+1

Das ist für eine Variable - das ist eine * Methode * Deklaration. Ich war mir der Variablen bewusst, aber dies ist das erste Mal, dass ich es für eine Methode gesehen habe. –