Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 如何处理Kotlin中返回的对象表达式_Generics_Kotlin - Fatal编程技术网

Generics 如何处理Kotlin中返回的对象表达式

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)”呢

为什么我不能使用“
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)