第二次打印时出错n:
智能强制转换为“Boolean”是不可能的,因为“r.isSquare”是一个可变属性,此时可能已被更改
fun main(args: Array<String>) {
val r: Rectangle = Rectangle(5,5)
println(r.isSquare)
r.isSquare = true
println(r.isSquare) // error but works with println(r.isSquare?:false)
}
data class Rectangle(var height: Int, var width: Int){
var isSquare: Boolean? = null
}
如果它是null,它会像第一个println一样打印null,为什么我必须这样做?
println(message: Any?)
println(message: Boolean)
编辑2
下面是我如何处理编译器以保持对isSquare是布尔值的信任?
fun main(args: Array<String>) {
val r: Rectangle = Rectangle(5, 5)
println(r.isSquare)
r.isSquare = true as Boolean? // if no cast, he will try wrong println signature
println(r.isSquare)
}
data class Rectangle(var height: Int, var width: Int){
var isSquare: Boolean? = null
}
由于r.issquare
是一个可变属性,编译器无法在null检查后将其智能强制转换为非null属性。
您可以使用let
:
r.isSquare.let { println(it) }
let
只读取r.issquare
的值一次,它在lambda中提供与it
相同的值。因此即使在null检查之后也不必使用?
或!!
来访问布尔值。
fun main(args: Array<String>) {
var x : Any
x = ""
x.toUpperCase() // OK, smart cast to String
}
第一个println
使用此println(消息:any?)
由于您将true
分配给issquare
下一步,因此当您尝试打印issquare
类型时,编译器将尝试将issquare
智能强制转换为boolean
类型。但无法智能强制转换,因为属性是可变类型。
如果删除行r.issquare=true
,则编译器不会尝试将其智能强制转换为boolean
,而是使用带有any?
的println
作为参数。
我正在尝试在 Kotlin 中生成一个单例,并且遇到了问题,因为我无法。 这似乎是制作单例的一种非常标准的方法。为什么它不让我,我该如何解决它?
我有调用我的后端endpoint进行身份验证的,我想简单地将true/false返回到另一个组件,这样我就可以显示/隐藏错误消息。最重要的是,成功后,我想将令牌存储在中。 这叫什么 问题是,不是真/假,但它是真的
为什么当我使用No.2脚本时Android Studio显示错误。我发现1和2之间没有区别。 请解释这个案例
我已经使用android studio内置的文件转换器将java文件转换为kotlin。它显示以下错误。 [SMARTCAST_IMPOSSIBLE]智能强制转换为“ReminderRequester”是不可能的,因为“ReminderRequester”是一个可变属性,此时可能已被更改 我查过类似的问题,但我不能正确地理解它。 上述错误的含义是什么?如何修复?
我的困难是 如何修复函数SortByTotal中的任何错误? 1.1错误:(32,51)Kotlin:无法智能强制转换为“OrderProcessing.OrderNode”,因为“Run.Next”是一个复杂的表达式 我明白有很多错误,回答其中的任何一个部分或者给我一些暗示已经很感激了。谢谢你的好意。 我的代码如下: 涉及的类: