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.