Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!nx02.iad01.newshosting.com!newshosting.com!69.16.185.21.MISMATCH!npeer03.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail From: Lew Newsgroups: comp.lang.java.programmer Subject: Re: Cannot create a generic array of Date: Tue, 18 Oct 2011 23:28:48 -0700 (PDT) Organization: http://groups.google.com Lines: 44 Message-ID: <11633107.472.1319005728890.JavaMail.geo-discussion-forums@prfp13> References: Reply-To: comp.lang.java.programmer@googlegroups.com NNTP-Posting-Host: 173.164.137.214 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1319005729 23671 127.0.0.1 (19 Oct 2011 06:28:49 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Wed, 19 Oct 2011 06:28:49 +0000 (UTC) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=173.164.137.214; posting-account=CP-lKQoAAAAGtB5diOuGlDQk0jIwmH0T User-Agent: G2/1.0 X-Google-Web-Client: true Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:8977 Warren Tang wrote: > The following code: >=20 > ArrayList[] indexedValues =3D new ArrayList[5]; >=20 > generates an error: >=20 > Cannot create a generic array of ArrayList >=20 > Could someone explain this to me? Sure. The short answer is that generics and arrays do not mix. Slightly l= onger, the Java Language Specification explicitly forbids arrays of non-rei= fiable types: "An array creation expression specifies the element type, the number of lev= els of nested arrays, and the length of the array for at least one of the l= evels of nesting. ... It is a compile-time error if the element type is not= a reifiable type". Generic types like 'ArrayList' are not reifiable, that is, you can= not actually create such a type at runtime due to type erasure. The longer answer is that arrays are reifiable, therefore their element typ= es must also be reifiable. Unlike generics, arrays carry their base type w= ith them at run time - they "know" their type. Generic types do not. (You= can get around this with a run-time type token, or RTTT, but that's a topi= c for another discussion.) So when you try to make an array of a generic t= ype you deprive the array of information it needs. This the compiler won't= allow. Back to the short answer: don't mix arrays and generics. There are a few c= onversion classes in the Collections framework that let you convert between= them, but use them sparingly and usually to go from array-land to collecti= ons-land to stay. Arrays.asList static List asList(T... a) --=20 Lew