提问人:Vanny 提问时间:4/27/2023 更新时间:4/27/2023 访问量:48
如何解决“未解析的引用”Kotlin 函数
How to solve "Unresolved Reference" Kotlin Function
问:
我正在尝试构建以下程序:
open class Phone(var isScreenLightOn: Boolean = false){
open fun switchOn() {
isScreenLightOn = true
}
open fun switchOff() {
isScreenLightOn = false
}
open fun checkPhoneScreenLight() {
var phoneScreenLight = if (isScreenLightOn) "on" else "off"
println("The phone screen's light is $phoneScreenLight.")
}
}
class FoldablePhone (var folded: Boolean = true): Phone() {
fun fold (){
if (folded == false){
folded = true
println(folded)
isScreenLightOn = false
}
else {
println(folded)
}
}
fun unfold (){
if (folded == true){
folded = false
println(folded)
}
else {
println(folded)
}
}
override fun switchOn(){
if (folded == false){
isScreenLightOn = true
checkPhoneScreenLight()
}
else {
println("Phone folded")
}
}
}
fun main()
{
var phone: Phone = FoldablePhone()
phone.fold()
phone.switchOn()
phone.unfold()
}
编译时,出现 main() 中 phone.fold() 和 phone.unfold() 的“未解析引用”错误。我在网上查了一下,没有发现任何帮助,因为人们说应该声明有问题的功能,而实际上我这样做了。请问我该如何解决这个问题?
答:
1赞
Raman
4/27/2023
#1
您已将变量声明为 类型为 。但 和 函数仅在子类型上可用。因此,它们无法访问。phone
Phone
fold
unfold
FoldablePhone
而不是:
var phone: Phone = FoldablePhone()
您可以使用:
var phone: FoldablePhone = FoldablePhone()
或更短,因为 Kotlin 可以推断类型:
var phone = FoldablePhone()
或者,您可以在使用函数之前检查类型:fold/unfold
if (phone is FoldablePhone) phone.fold()
这使用“智能强制转换”,即 Kotlin 编译器知道变量内部是 a 并自动将其强制转换为该类型。if
phone
FoldablePhone
这种替代方法在实际程序中变得更加有用,其中函数可以对 的类型进行操作,并且它必须有条件地执行折叠/展开函数。Phone
评论
phone
Phone
fold
unfold
FoldablePhone
val phone = FoldablePhone()
phone