Kotlin:不兼容的类型:String和Int
我尝试在Kotlin中编写此代码:Kotlin:不兼容的类型:String和Int,kotlin,Kotlin,我尝试在Kotlin中编写此代码: fun main() { val number = 9 when (number) { is String -> println("Number is String") !is String -> println("Number is not String") } } 但是出现了一个错误:不兼容的类型:String和Int。 不应该出现“数字不是字符
fun main() {
val number = 9
when (number) {
is String -> println("Number is String")
!is String -> println("Number is not String")
}
}
但是出现了一个错误:不兼容的类型:String和Int
。
不应该出现“数字不是字符串”这样的词吗?因为您的IDE已经知道数字是整数,所以IDE会告诉您它不兼容,请尝试此选项
fun main(any: Any){
when (any){
is String -> {}
is Int -> {}
}
}
不兼容类型:String和Int
不是程序打印的内容;这是一个编译器错误
数字不是字符串
是运行程序时显示的内容。但您无法运行它,因为它无法编译
它不编译的原因是因为编译器开发人员认为,试图检查
Int
是否是字符串很可能是程序员的错误,所以最好先给你一个机会来修复它。正如@lukman nudin提到的,Koltin
将根据初始化值/类型自动转换变量类型,因此
语句val number=9
相当于val number:Int=9
,这意味着您严格地将其强制转换为Int
,并尝试检查String
的实例,它将失败,因此您需要显式地使用Any
fun main() {
val number:Any = 9
when (number) {
is String -> println("Number is String")
else -> println("Number is not String")
}
}
一个简单的例子:
if (9 is String) println("9 is a string")
9是字符串
永远不能是true
is
操作符是一个运行时检查,用于检查对象的类型。但是在这里,编译器在编译时知道运行时检查是无用的,这意味着您可能犯了一个逻辑错误。使用字符串数组以外的任何东西作为main()
的参数有点奇怪。例如,这将阻止函数在IntelliJ中运行。