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
对类实例使用println时,Kotlin输出异常_Kotlin - Fatal编程技术网

对类实例使用println时,Kotlin输出异常

对类实例使用println时,Kotlin输出异常,kotlin,Kotlin,我要走了Person@4b67cf4d作为输出 fun main(args: Array<String>){ var person = Person("Jimmy") println(person) } class Person(val name: String){ var age = 10 } fun main(args:Array){ var person=人(“吉米”) println(人) } 类人员(val名称:字符串){ 变量年龄=10 }

我要走了Person@4b67cf4d作为输出

fun main(args: Array<String>){
    var person = Person("Jimmy")
    println(person)
}


class Person(val name: String){
    var age = 10
}
fun main(args:Array){
var person=人(“吉米”)
println(人)
}
类人员(val名称:字符串){
变量年龄=10
}

输出应该是Jimmy。抱歉,如果我不够清楚,我刚开始学习Kotlin,但找不到解决方法。

您应该打印对象Person的名称变量

所以它只是
println(person.name)

使用
println(person)
只需打印对象实例散列


顺便说一句,您可以将这个类作为
类Person(val name:String,var age:Int=10)内联。
您必须重写
类中的
toString()
方法:

class Person(val name: String){
    var age = 10

    override fun toString(): String {
        return name
    }
}
现在,您的代码将打印:

Jimmy

而不是hashcode。

只需使用
数据类

fun main(args: Array<String>){
    var person = Person("Jimmy")
    println(person)
}


data class Person(val name: String, var age = 10)
简单回答:覆盖

Java和Kotlin有一种将任何对象转换为字符串的标准方法:
toString()
方法

这是在顶级类和中定义的,因此每个对象都保证有此方法。那里的实现只返回类名后跟“@”和对象的十六进制表示形式。(它们必须适用于所有可能的对象类型,因此它们没有任何其他信息可用。)

这就是您在输出中看到的

如果希望类显示更有意义的内容,则应重写
Person
类中的
toString()
方法。例如,要根据请求显示名称:

override fun toString() = name
但是,在实践中,这并不总是最好的方法。
toString()
将在对象打印到日志、错误消息或类似内容时被调用,因此使用不太含糊的表示更有用,例如:

override fun toString() = "Person($name, $age)"
(或者,您可以将其设为,它将自动提供合适的
toString()
实现,以及其他一些功能。)

当您想在打印名称时,可以显式执行以下操作:

println(person.name)
或者您可以提供单独的调用方法,例如:

fun toPrettyString() = name
然后:

println(person.toPrettyString())
这会让你的意图更加清晰。

println(person.name)
应该打印“Jimmy”。您的调用应该打印对象的haschcode,并且打印正确。相关:。。。它还显示了为什么是这种方式(
toString
)。科特林也是如此。。。一个特例是
数据类
,但您可以自己阅读;-)“只是内联这个类”,这将产生不同的行为,使您能够在构建实例时设置
age
,这不一定是需要的。
println(person.toPrettyString())