You need to pass in an array so its runtime type can be used as a hint by toArray
. Try toArray(new String[0])
instead. You can also pass in a pre-sized array.
To understand, consider what type erasure would have to do to make
new T[4]
work. If Java allowed that, the best it could do post erasure is
new Object[4]
Most toArray
implementations use java.lang.reflect.Array
to construct an output array of the right type given a type hint passed as a Class
.