Generics 如何处理Kotlin中返回的对象表达式
为什么我不能使用“println(result.name)”和“println(result.age)”呢 为什么我不能使用“Generics 如何处理Kotlin中返回的对象表达式,generics,kotlin,Generics,Kotlin,为什么我不能使用“println(result.name)”和“println(result.age)”呢 为什么我不能使用“println(result.name)”和“println(result.age)” 因为您将fun personInfo的返回类型声明为Any。对象表达式没有命名类型,因此除非直接引用表达式的结果,否则无法引用它,而只有当表达式是顶级变量时才能引用 Kotlin不具有结构类型,相反,您必须声明具有以下属性的命名接口: fun personInfo(_name: Str
println(result.name)
”和“println(result.age)
”
因为您将fun personInfo
的返回类型声明为Any
。对象
表达式没有命名类型,因此除非直接引用表达式的结果,否则无法引用它,而只有当表达式是顶级变量时才能引用
Kotlin不具有结构类型,相反,您必须声明具有以下属性的命名接口:
fun personInfo(_name: String, _age: Int):Any {
val person = object {
val name = _name
val age = _age
}
return person
}
fun main() {
val result = personInfo("sam", 36)
println(result.name) //error
println(result.age) //error
}
然而,在Kotlin,我认为这是一个非常尴尬的习语,数据类会更自然:
interface PersonInfo {
val name: String
val age: Int
}
fun personInfo(_name: String, _age: Int) = object : PersonInfo {
override val name = _name
override val age = _age
}
您也可以删除有趣的personInfo
,直接使用构造函数
data class PersonInfo(
val name: String,
val age: Int
)
fun personInfo(_name: String, _age: Int) = PersonInfo(_name, _age)