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.