title: Method references to multidimensional arrays in Java 8
body: <p>In Java we may create <code>IntFunction&lt;String[]&gt;</code> from 1D array constructor reference:</p>
  
  <pre><code>    // both do the same thing
      IntFunction&lt;String[]&gt; createArrayL = size -&gt; new String[size];
      IntFunction&lt;String[]&gt; createArrayMR = String[]::new;
  </code></pre>
  
  <p>Now I wonder why we cannot do this with a 2D array:</p>
  
  <pre><code>    BiFunction&lt;Integer, Integer, String[][]&gt; createArray2DL = 
              (rows, cols) -&gt; new String[rows][cols];
  
      // error:
      BiFunction&lt;Integer, Integer, String[][]&gt; createArray2DMR =
              String[][]::new;
  </code></pre>
  
  <p>Of course we may write:</p>
  
  <pre><code>    IntFunction&lt;String[][]&gt; createArray2DInvalidL = String[][]::new;
      System.out.println(createArray2DInvalidL.apply(3)[0]); // prints null
  </code></pre>
  
  <p>but this will behave differently than:</p>
  
  <pre><code>    new String[3][3]
  </code></pre>
  
  <p>because row arrays will not be initialized.</p>
  
  <p>So my question is: why <code>String[][]::new</code> doesn't work for 2D arrays (for me it looks like an inconsistency in language design)?</p>