Java doesn't allow arrays of inner classes for a generic class

arrays, generics, java

Solution

Do the following:

@SuppressWarnings("unchecked")
final Inner[] inners = (Inner[])new Outer<?>.Inner[16];

The equivalent to your first example would have been `new Outer.Inner[16]` but this will isolate the unchecked cast and avoid the raw type.

Problem

I know that you cannot create an array of a generic type, Instead you have to resort to a hack. (Given Java supports generic arrays, just not their creation, it is not clear to me why a hack is better than Java supporting creating generic arrays) Instead of writing this ``` Map.Entry<K, V>[] entries = new Map.Entry<K, V>[numEntries]; ``` you have to write this ``` @SuppressWarnings("unchecked") Map.Entry<K, V>[] entries = (Map.Entry<K, V>) new Map.Entry[numEntries]; ``` Unfortunately this doesn't work if you have an array of nested type of a generic ``` public class Outer<E> { final Inner[] inners = new Inner[16]; // Generic array creation class Inner { } } ``` The best work around appears to be ``` @SuppressWarnings("unchecked") final Inner[] inners = (Inner[]) Array.newInstance(Inner.class, 16); ``` Is this the most "elegant" solution? I make seen Generic Array Creation Compilation Error From Inner Class but the solution here is worse IMHO.

Original source

Related problems