Question: Why can't I create an array of List ?

```
List<String>[] nav = new List<String>[] { new ArrayList<String>() };

```

Eclipse says "Cannot create a generic array of List"

or

```
ArrayList<String>[] nav = new ArrayList<String>[] { new ArrayList<String>() };

```

Eclipse says "Cannot create a generic array of ArrayList"

or

```
List<String>[] getListsOfStrings() {
    List<String> groupA = new ArrayList<String>();
    List<String> groupB = new ArrayList<String>();
    return new List<String>[] { groupA, groupB };
}

```

But I can do this:

```
List[] getLists() {
    return new List[] { new ArrayList(), new ArrayList() };
}

```

Eclipse says that List and ArrayList are *raw types* but it compiles...

Seems pretty simple, why won't it work?

Answer: 
Well, [generics tutorial](http://docs.oracle.com/javase/tutorial/extra/generics/fineprint.html) give the answer to your question.

> 
> The component type of an array object
>  may not be a type variable or a
>  parameterized type, unless it is an
>  (unbounded) wildcard type.You can
>  declare array *types* whose element type
>  is a type variable or a parameterized
>  type, but not array *objects*.
> 
> 
> This is
>  annoying, to be sure. This restriction
>  is necessary to avoid situations like:
> 
> 
> 
> ```
> // Not really allowed.
> List<String>[] lsa = new List<String>[10];
> Object o = lsa;
> Object[] oa = (Object[]) o;
> List<Integer> li = new ArrayList<Integer>();
> li.add(new Integer(3));
> // Unsound, but passes run time store check
> oa[1] = li;
> 
> // Run-time error: ClassCastException.
> String s = lsa[1].get(0);
> 
> ```
> 
> If arrays of parameterized type were
>  allowed, the previous example would
>  compile without any unchecked
>  warnings, and yet fail at run-time.
>  We've had type-safety as a primary
>  design goal of generics.
> 
> 
>
Another solution is to extend `LinkedList<String>` (or `ArrayList<String>`, etc.), then create an array of the subclass.

```
private static class StringList extends LinkedList<String> {}

public static void main(String[] args)
{
    StringList[] strings = new StringList[2];
    strings[0] = new StringList();
    strings[1] = new StringList();
    strings[0].add("Test 1");
    strings[0].add("Test 2");
    strings[1].add("Test 3");
    strings[1].add("Test 4");
    System.out.println(strings[0]);
    System.out.println(strings[1]);
}

```