casting Arrays.asList causing exception: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
arraylist, arrays, casting, java, multidimensional-array
Solution
For me (using Java 1.6.0_26), the first snippet gives the same exception as the second one. The reason is that the `Arrays.asList(..)` method does only return a `List`, not necessarily an `ArrayList`. Because you don't really know what kind (or implementation of) of `List` that method returns, your cast to `ArrayList<String>` is not safe. The result is that it may or may not work as expected. From a coding style perspective, a good fix for this would be to change your `stuff` declaration to:
List<List<String>> stuff = new ArrayList<List<String>>();
which will allow to add whatever comes out of the `Arrays.asList(..)` method.
Problem
I'm new to Java and am trying to understand why the first code snippet doesn't cause this exception but the second one does. Since a string array is passed into Arrays.asList in both cases, shouldn't both snippets produce an exception or not produce an exception? ``` Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList ``` First snippet (causes no exception): ``` ArrayList<ArrayList<String>> stuff = new ArrayList<ArrayList<String>>(); String line = "a,b,cdef,g"; String delim = ","; String[] pieces = line.split(delim); stuff.add((ArrayList<String>) Arrays.asList(pieces)); ``` Second snippet (causes above exception): ``` ArrayList<ArrayList<String>> stuff = new ArrayList<ArrayList<String>>(); String[] titles = {"ticker", "grade", "score"}; stuff.add((ArrayList<String>) Arrays.asList(titles)); ``` If relevant, I'm using JavaSE 1.6 in Eclipse Helios.