Weird "[]" after Java method signature
JavaArraysSyntaxJava Problem Overview
I looked at some Java code today, and I found some weird syntax:
public class Sample {
public int get()[] {
return new int[]{1, 2, 3};
}
}
I thought that can't compile and wanted to fix what I thought was a typo, but then I remembered the Java compiler did actually accept it!
Can someone please help me understand what it means? Is it an array of functions?
Java Solutions
Solution 1 - Java
It's a method that returns an int[]
.
> ###Java Language Specification (8.4 Method Declarations) > For compatibility with older versions of the Java platform, a declaration form for a method that returns an array is allowed to place (some or all of) the empty bracket pairs that form the declaration of the array type after the parameter list.
> This is supported by the obsolescent production:
>
> MethodDeclarator:
> MethodDeclarator [ ]
>
> but should not be used in new code.
Solution 2 - Java
That's a funny Question.
In java you can say int[] a;
, as well as int a[];
.
From this perspective, in order to get the same result just need to move the []
and write public int[] get() {
.
Still looks like the code came from an obfuscator...
Solution 3 - Java
As there is a C tag, I'll point out that a similar (but not identical) notation is possible in C and C++:
Here the function f
returns a pointer to an array of 10 ints.
int tab[10];
int (*f())[10]
{
return &tab;
}
Java simply doesn't need the star and parenthesis.
Solution 4 - Java
java's syntax allows for the following:
int[] intArr = new int[0];
and also
int intArr[] = new int[0];
which looks more fmiliar coming from the c-style syntax.
so too, with a function, the name can come before or after the [], and the type is still int[]