I defined List<Integer> stack = new ArrayList<Integer>();
When I'm trying to convert it to an array in the following way:
Integer[] array= stack.toArray();
I get this exception:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Object[] to Integer[].
Why? It is exactly the same type- Integer to Integer. It's not like in this generic case when the classes are father-and-son relation
I tried to do casting:
Integer[] array= (Integer[]) stack.toArray();
But here I get this error:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
What is the problem?
You can convert a String to integer using the parseInt() method of the Integer class. To convert a string array to an integer array, convert each element of it to integer and populate the integer array with them.
Because of type erasure, the ArrayList does not know its generic type at runtime, so it can only give you the most general Object[]. You need to use the other toArray method which allows you to specify the type of the array that you want.
Integer[] array= stack.toArray(new Integer[stack.size()]);
The way to do it is this:
Integer[] array = stack.toArray(new Integer[stack.size()]);
For the record, the reason that your code doesn't compile is not just type erasure. The problem is that List<T>.toArray()
returns an Object[]
and it has done this before generics were introduced.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With