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: 
You can't create arrays of generic types, generally.

The reason is that the JVM has no way to check that only the right objects are put into it (with ArrayStoreExceptions), since the difference between `List<String>` and `List<Integer>` are nonexistent at runtime.

Of course, you can trick the compiler by using the raw type `List` or the unbound wildcard type `List<?>`, and then cast it (with a unchecked cast) to `List<String>`. But then it is your responsibility to put only `List<String>` in it and no other lists.
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.