Kotlin:为什么*未解析的引用*用于密封 class 的 subclass 的构造函数参数
Kotlin : Why *unresolved reference* for a constructor parameter of a subclass of a sealed class
sealed class Person () {
data class Man (val name: String): Person()
data class Woman (val name: String): Person()
fun stringOf(): String {
return when (this) {
is Person.Man -> "Mr "+this.name
is Person.Woman -> "Mrs "+this.name
}
} // works fine
fun nameOf() : String {
return this.name // error: unresolved reference: name
}
}
fun main(args: Array<String>) {
val man = Person.Man("John Smith")
println (man.stringOf())
}
为什么上面的代码给出 error: unresolved reference: name for the function nameOf 而 works correctly for function stringOf 看起来非常相似。
因为在Person
class中没有定义name
属性。您拥有的所有 name
都在子 class 中,因此父 class 中的 nameOf
函数无法访问它。
sealed class Person () {
data class Man (val name: String): Person()
data class Woman (val name: String): Person()
fun stringOf(): String {
return when (this) {
is Person.Man -> "Mr "+this.name
is Person.Woman -> "Mrs "+this.name
}
} // works fine
fun nameOf() : String {
return this.name // error: unresolved reference: name
}
}
fun main(args: Array<String>) {
val man = Person.Man("John Smith")
println (man.stringOf())
}
为什么上面的代码给出 error: unresolved reference: name for the function nameOf 而 works correctly for function stringOf 看起来非常相似。
因为在Person
class中没有定义name
属性。您拥有的所有 name
都在子 class 中,因此父 class 中的 nameOf
函数无法访问它。