Weird "[]" after Java method signature

JavaArraysSyntax

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohannes Schaub - litbView Question on Stackoverflow
Solution 1 - JavammxView Answer on Stackoverflow
Solution 2 - JavaCostis AivalisView Answer on Stackoverflow
Solution 3 - JavaAProgrammerView Answer on Stackoverflow
Solution 4 - JavadavinView Answer on Stackoverflow