Kotlin: generics, reflexión y la diferencia entre tipo T y T: cualquier

Si bash acceder al javaClass de un tipo genérico T, el comstackdor de Kotlin se queja de que T no es un subtipo de kotlin.Any

class Foo<T> (val t: T ){ val cls = t.javaClass // Error, T is not a subtype of kotlin.Any } 

Si define T como un subtipo de Cualquiera todo funciona bien.

 class Bar<T:Any> (val t: T ){ val cls = t.javaClass // OK } 

Q1) Si el tipo 'T' no es un subtipo de'Any' ¿qué class / classs puede ser un subtipo de?

P2) ¿Existe una javaClass para todas las instancias de T y, de ser así, cómo puedo acceder a ella?

El límite superior genérico pnetworkingeterminado no es Any sino Any? .

Esto también implica que no es nulo seguro para get un javaClass de un argumento que javaClass .

¿Para get un javaClass de una instancia de tipo genérico con Any? límite superior, puedes convertirlo a Any :

 val cls = (t as Any).javaClass //unsafe val clsOrNull = (t as? Any)?.javaClass //safe