e.g。给定Class<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中找到类似的方法。
答案 0 :(得分:4)
至于现在,我发现了这个非常糟糕的解决方法:
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
)对类型进行未经检查的强制转换,然后在运行时将其擦除。
限制是解决方案无法使用具体化的泛型:如果handleEnum
具有已知的类型参数,则它将替换为静态推断类型({{1 }})。