Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用不同的上限调用Kotlin中的方法?_Kotlin - Fatal编程技术网

如何使用不同的上限调用Kotlin中的方法?

如何使用不同的上限调用Kotlin中的方法?,kotlin,Kotlin,e、 g.给定一个类如何调用/调用需要类的方法/构造函数,其中T:Enum fun handleAny(classOfT:Class){ if(classOfT.isEnum){ handleEnum(ClassSoft) } } fun handleEnum(classOfT:Class){/*…*/} 错误:推断类型T不是kotlin的子类型。Enum 在Java中,我可以执行未经检查的调用,但在Kotlin中,我似乎找不到类似的方法。目前,我发现了一个非常棘手的解决方法: private

e、 g.给定一个
如何调用/调用需要
类的方法/构造函数,其中T:Enum

fun handleAny(classOfT:Class){
if(classOfT.isEnum){
handleEnum(ClassSoft)
}
}
fun handleEnum(classOfT:Class){/*…*/}
错误:
推断类型T不是kotlin的子类型。Enum


在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())
}
私有枚举类dummeyenum
趣味手感(classOfT:Class){
if(classOfT.isEnum){
handleEnum(classOfT as Class)//任何枚举都会
}
}
趣味handleEnum(ClassSoft:Class){
println(classOfT.toString())
}
我们的想法是使用任何满足上限的泛型参数(让它成为
dummeynum
)对类型进行未经检查的强制转换,然后在运行时将其删除


限制是解决方案不能正确地与具体化泛型一起工作:如果
handleEnum
具有具体化类型参数,它将被静态推断类型(
dummeyenum
)所取代。

FYI:除了我在下面创建的热键解决方法之外。
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())
}