gpt4 book ai didi

kotlin - 如何在 Kotlin 中调用具有不同上限的方法?

转载 作者:行者123 更新时间:2023-12-01 23:30:47 26 4
gpt4 key购买 nike

例如给出 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 中执行类似操作的方法。

最佳答案

至于现在,我发现了这个非常 hacky 的解决方法:

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有具体化的类型参数,它将被静态推断类型替换(DummyEnum).

关于kotlin - 如何在 Kotlin 中调用具有不同上限的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37145009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com