To Jose Botella:
The cast "(Object[]) new int[][] {{}};" conflicts --to my knowledge-- with JLS 5.5
No, it doesn't conflicts with JLS 5.5.
Now, let's first look at what JLS 5.5 says:
<1> If S is an array type SC[], that is, an array of components of type SC :
<1.1> If T is an array type TC[], that is, an array of components of type TC, then a compile-time error occurs
unless one of the following is true:
<1.1.1> TC and SC are reference types and type SC can be cast to TC by a recursive application of these compile-time rules for casting.
So, here SC[] is int[][], which is an array of int[], SC is hence int[]. TC[] is Object[], and TC is of type Object. Since int[] can be cast to Object at compile-time, it is correct to cast int[][] to Object[], according to the above rule. Actually, it's a narrowing reference conversion from int[][] to Object[].