¿Cómo llamo a un método en Kotlin con un límite superior diferente?

Por ejemplo, dada una Class<T> ¿cómo invoco / invoco un método / constructor que requiere una Class<T> where T : Enum<T> ?

 fun <T : Any> handleAny(classOfT: Class<T>) { if (classOfT.isEnum) { handleEnum(classOfT) } } fun <T : Enum<T>> handleEnum(classOfT: Class<T>) { /*...*/ } 

Error: el infernetworking type T is not a subtype of kotlin.Enum<T>

En Java puedo hacer una llamada sin marcar, pero parece que no puedo encontrar una manera de hacer algo similar en Kotlin.

Por ahora, encontré esta solución bastante hacky para ello:

 private enum class DummyEnum fun <T> handleAny(classOfT: Class<T>) { if (classOfT.isEnum) { handleEnum(classOfT as Class<DummyEnum>) //absolutely any enum goes } } fun <T : Enum<T>> handleEnum(classOfT: Class<T>) { println(classOfT.toString()) } 

La idea es hacer un lanzamiento desactivado al tipo con cualquier parámetro genérico que satisfaga el límite superior (que sea DummyEnum ), que luego se borrará en time de ejecución de todos modos.

La limitación es que la solución no funciona correctamente con los generics reificados : si handleEnum tuviera el parámetro tipo reificado, se sustituiría por el tipo inferido estáticamente ( DummyEnum ).

  • ¿Cómo hacer reference a la class interna anónima en Kotlin?
  • Error al ejecutar la testing: la ejecución de la instrumentación falló debido a 'kotlin.UninitializedPropertyAccessException'
  • ¿Hay alguna manera de filtrar nulo Any? valores en Kotlin Map?
  • Cómo verificar el vacío lambda en kotlin
  • Cómo pasar object personalizado a través de bash en kotlin
  • Lista de edición de Kotlin
  • Choque de statement de plataforma con comparable
  • Teclear argumento no reconocido en Kotlin
  • No se puede hacer que Coverity Scan funcione (Java / Kotlin / Gradle 3.3 en Windows y Travis)
  • TextInputLayout habilitado no guardado después de destruir y volver a crear
  • Kotlin NoClassDefFoundError con el método @RequestMapping de spring