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.
- ¿Cómo pasar un parámetro de tipo a una reference genérica de constructor de class?
- Llamar al constructor de la class por reflexión con Kotlin
- ¿Cómo get los arguments de tipo reales de un parámetro genérico reificado en Kotlin?
- Reflexión de kotlin para el método de Java que acepta una matriz de class nula
- ¿Cómo iterar a través de los attributes de un JsonObject recursivamente?
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?
- Cómo acceder a los attributes / methods en el parámetro de class genérico
- El parámetro de tipo Force es invariante en el sitio de uso cuando es covariante en el sitio de statement
- Método de llamada en class genérica a través de la reflexión
- Los generics en KProperty1.getDelegate ¿son demasiado restrictivos?
- Kotlin: Cantidades masivas de ConsPStack, ¿cómo puedo evitar?
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