Has any one seen the array []
placed after the method signature like this?
public static String mySplit(String s)[] { return s.split(","); } public static void main(String... args) { String[] words = mySplit("a,b,c,d,e"); System.out.println(Arrays.toString(words)); }
prints
[a, b, c, d, e]
In the past, odd notations have been for "C" compatibility, but I wouldn't imagine someone writing this in C either.
Does anyone know why this is even allowed?
I am using Java 7 update 10, in case it matters.
This does the same thing in Java 6. http://ideone.com/91rZV1
BTW this doesn't compile, nor would I expect it to
public static <T> List mySplit(String s)<T> { return Collections.emptyList(); }
Does anyone know why this is even allowed?
In this case it's for backward compatibility with Java itself. From the JLS section 8.4:
For compatibility with older versions of the Java SE platform, the declaration of 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 formal parameter list. This is supported by the following obsolescent production, but should not be used in new code.
And yes, you should indeed regard it as an abomination which has no good purpose other than to shock other developers. Actually, you might be able to use it to win some money at parties by betting that it would compile, against folks who've never seen it...
Here's the kind of method which right-minded coders would expect to be invalid:
public String[] mwahahaha(String[] evil[])[] { return evil; }
It's like
String[] a;
is the same as
String a[];
Same works for the syntax of method return types
public static String mySplit(String s)[] {
is the same as
public static String[] mySplit(String s) {
But I think I never saw the version you mentioned in productive code yet.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With