我想检查该函数是否具有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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时,我看到以下错误:
> Error:(20, 19) Incompatible types: A and kotlin.reflect.KType
Run Code Online (Sandbox Code Playgroud)
问题:
IA接口和ActionEventJava类的错误?A上课错误?A类型的参数?问题是你要检查是否KType是A,总是如此false.并且编译器知道它并引发编译错误.但是IA实现的类的接口是否KType也可能实现此接口,因此没有编译错误.ActionEvent是一个开放类,所以它的子类型可以实现KType- 也没有编译错误.
您应该做什么来检查参数类型是某个类还是某个接口,如下所示.
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.")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1260 次 |
| 最近记录: |