如何在Kotlin中调用不同的上限?

例如给定一个Class<T>如何调用/调用需要Class<T> where T : Enum<T>的方法/构造函数, 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>) { /*...*/ } 

错误: inferred type T is not a subtype of kotlin.Enum<T>

在Java中,我可以做一个未经检查的调用,但我似乎无法找到一种方法来做任何类似的Kotlin。

至于现在我发现这个很不方便的解决方法:

 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()) } 

这个想法是使用任何满足上限的泛型参数(让它成为DummyEnum )来进行一个未经检查的DummyEnum ,然后将在运行时被擦除。

限制是解决方案不能正确地使用 handleEnum 泛型 :如果handleEnum具有指定的类型参数,它将被替换为静态推断的类型( DummyEnum )。