gpt4 book ai didi

kotlin - 不兼容的类型 : A and kotlin. reflect.KType

转载 作者:行者123 更新时间:2023-12-01 09:51:29 25 4
gpt4 key购买 nike

我想检查函数是否有 A 类型的参数,请使用以下代码:

import kotlin.reflect.*
import javafx.event.ActionEvent

interface IA {}

class A {}

class B {
fun test(a: A, ia: IA, event: ActionEvent) {
println(a)
println(ia)
println(event)
}
}

fun main(args: Array<String>) {
for (function in B::class.declaredMemberFunctions) {
for (parameter in function.parameters) {
when (parameter.type) {
is IA -> println("Has IA interface parameter.")
is ActionEvent -> println("Has ActionEvent class parameter.")
is A -> println("Has A class parameter.") // <---- compilation error in this line
}
}
}
}

但是当我尝试编译它时,我看到以下错误:

> Error:(20, 19) Incompatible types: A and kotlin.reflect.KType

问题:

  1. 为什么编译器不会为 IA 接口(interface)和 ActionEvent Java 类引发错误?
  2. 为什么编译器会为 A 类引发错误?
  3. 如何检查函数是否有 A 类型的参数?

最佳答案

问题是您正在尝试检查 KType 是否为 A,而这始终是 false。编译器知道它并引发编译错误。但是IA是一个接口(interface),实现KType的类也可能实现这个接口(interface),所以不会出现编译错误。 ActionEvent 是一个开放类,因此它的子类型可以实现 KType - 也没有编译错误。

您应该如何检查参数类型是某个类还是某个接口(interface)。

when (parameter.type.javaType) {
IA::class.javaClass -> println("Has IA interface parameter.")
ActionEvent::class.javaClass -> println("Has ActionEvent class parameter.")
A::class.javaClass -> println("Has A class parameter.")
}

关于kotlin - 不兼容的类型 : A and kotlin. reflect.KType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36825297/

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