 <p>Per the <a href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.10" rel="nofollow">language spec, section 15.10</a>:</p> <blockquote> <p>"An array creation expression creates an object that is a new array whose elements are of the type specified by the PrimitiveType or ClassOrInterfaceType. It is a compile-time error if the ClassOrInterfaceType does not denote a reifiable type."</p> </blockquote> <p>And per the <a href="http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.7" rel="nofollow">language spec, section 4.7</a>:</p> <blockquote> <p>Because some type information is erased during compilation, not all types are available at run time. Types that are completely available at run-time are known as reifiable types.</p> <p>A type is reifiable if and only if one of the following holds: </p> <ul> <li>It refers to a non-generic class or interface type declaration. </li> </ul> <p>...</p> </blockquote> <p>So put simply, "because the language says you can't". I understand the ultimate cause dealt with maintaining backward compatibility, but I'm not familiar with the details.</p>