¿Cómo get un KType en Kotlin?

Estoy experimentando con la funcionalidad de reflexión en Kotlin, pero parece que no puedo entender cómo get un valor KType.

Supongamos que tengo una class que mapea frases en fábricas de objects. En caso de ambigüedad, el usuario puede suministrar un parámetro de type que limite la búsqueda a solo las fábricas que devuelven ese tipo de object (o algún subtipo).

 fun mapToFactory(phrase: Phrase, type: KType = Any::class): Any {...} 

type necesita aceptar casi cualquier cosa, incluido Int , que por mi experiencia parece ser tratada de manera especial. Por defecto, debería ser algo como Any , lo que significa "no excluir ninguna fábrica".

¿Cómo puedo asignar un valor pnetworkingeterminado (o cualquier valor) para type ?

Según su descripción, parece que su function debe tomar un parámetro KClass , no un KType , y verificar los objects entrantes con isSubclass , no isSubtype .

Los types (representados por KType en kotlin-reflect ) generalmente provienen de firmas de declaraciones en su código; denotan un amplio set de valores que las funciones toman como parameters o regresan. Un tipo consta de la class, arguments generics para esa class y capacidad de anulación. El problema con los types en time de ejecución en JVM es que, debido a la eliminación, es imposible determinar el tipo exacto de una variable de una class genérica. Por ejemplo, si tiene una list, no puede determinar el tipo genérico de esa list en time de ejecución, es decir, no puede diferenciar entre List<String> y List<Throwable> .

Sin embargo, para responder a su pregunta inicial, puede crear un KType de una KClass con createType() :

 val type: KType = Any::class.createType() 

Tenga en count que si la class es genérica, debe pasar proyecciones de tipo de arguments generics. En casos simples (todas las variables de tipo pueden replacese con proyecciones en estrella), starProjectedType también funcionará. Para get más información sobre createType y starProjectedType , consulte esta respuesta .

  • ¿Cómo cambiar un campo de miembro con la reflexión de Kotlin?
  • Obteniendo la class actual
  • Kotlin, cómo recuperar el valor del campo a través de la reflexión
  • La delegación de propiedad kotlin alias lanza Exception
  • ¿Cómo get una class de time de ejecución de una variable en Kotlin?
  • ¿El comstackdor de Kotlin siempre conserva los nombres de los parameters en bytecode?
  • Kotlin: isAssignableFrom y reflexiones del tipo de reflexión
  • Kotlin: ¿Cómo puedo usar la reflexión en los packages?
  • kotlin reflexión verificación nullable types
  • Usar reflexión para pasar y modificar una primitiva sin usar matriz
  • Kotlin: comparar los valores de propiedad de diferentes objects objective con (fuera) reflexión