Most generic type paramters are erased. There is one exception to this, however: Array is compiled to Java array, whose element type is not erased. Read the OPs example closely: Array<String>::class.java evaluated to String[], while Array<T>::class.java evaluated to Object[]. Since T is reified, you would expect it to be treated the same way as a non-parameter type such as String.
Looks like a bug to me. If you really need that class, you can get it like that: arrayOf<T>().javaClass It involves creating new object. You can also use something like Class.forName("[L${T::class.java.name};") which works but looks a bit more cryptic.