Skip to content

java.lang.ArrayStoreException on List to Array

When I use the toArray function from Java util I get an ArrayStoreException with no message. I implemented the absolute same code a year ago in pretty much the same Model and it works there, the query works fine and returns [1,2] from the DB. here is the code I use:

List<?> firstColumn = Base.firstColumn(query, paramList.toArray());
return firstColumn.toArray(new Integer[0]);

I dont understand why it would not show an Error Message, without it I was lost for days now, hence I turned to you guys, thanks in Advance!

Answer

The problem is that your firstColumn list does not contain Integer instances. Since you claim that it contains [1,2], probably your list contains Byte, Short, or Long instances. Java will perform some automatic conversions on primitive types, but it does not do that for wrapper objects or arrays. So you have two options:

  • Return an array of the correct type:

    return firstColumn.toArray(new Short[0]); // or Byte[0], or Long[0]
    
  • Or, if that is not an option, perform the conversion to integers yourself:

    return firstColumn.stream().map(x -> ((Number)x).intValue()).toArray(Integer[]::new);