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.
> 
> 
>
No exact answer, but a tip:

Last example has a raw type warning because you omitted the typization of the list; it is generally a better (type safe) approach to specify which object types are contained in the list, which you already did in the previous examples (`List<String>` instead of `List`).

Using arrays is not best practice, since their use contains errors most times; Using Collection classes (List, Set, Map,...) enables use of typization and of convenient methods for handling their content; just take a look at the static methods of the Collections class.

Thus, just use the example of the previous answer.