作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想检查函数是否有 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
问题:
IA
接口(interface)和 ActionEvent
Java 类引发错误?A
类引发错误?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/
我是一名优秀的程序员,十分优秀!