我得到Person @ 4b67cf4d作为输出。
fun main(args: Array<String>){
var person = Person("Jimmy")
println(person)
}
class Person(val name: String){
var age = 10
}
输出应为Jimmy。抱歉,如果我不够清楚,我才开始学习Kotlin,无法为此找到解决方案。
答案 0 :(得分:4)
您必须在toString()
类内重写方法Person
:
class Person(val name: String){
var age = 10
override fun toString(): String {
return name
}
}
现在您的代码将打印:
Jimmy
而不是哈希码。
答案 1 :(得分:2)
您应该打印对象Person的名称变量。
所以它就是println(person.name)
通过使用println(person)
,您只是在打印对象实例哈希值
顺便说一句。您可以将班级内联为class Person(val name: String, var age: Int = 10)
答案 2 :(得分:1)
简短答案:覆盖toString()。
Java和Kotlin具有将任何对象转换为String的标准方法:toString()
方法。
这是在顶级类java.lang.Object和kotlin.Any中定义的,因此可以确保每个对象都具有此方法。那里的实现只返回类名,后跟'@'和对象hashcode的十六进制表示。 (它们必须适用于每种可能的对象类型,因此它们没有其他要使用的信息。)
这就是您在输出中看到的。
如果您希望您的班级展示更有意义的内容,则应在toString()
类中重写Person
方法。例如,根据要求显示名称:
override fun toString() = name
但是,实际上,这并不总是最好的方法。每当您的对象打印到日志,错误消息等类似内容时,toString()
就会被调用,因此,使用一个比较明确的表示形式会更有用,例如:
override fun toString() = "Person($name, $age)"
(或者,您可以将其设置为data class,它将自动提供合适的toString()
实现以及其他一些功能。)
当您只想打印名称时,您可以明确地这样做:
println(person.name)
或者您可以提供单独的调用方法,例如:
fun toPrettyString() = name
然后:
println(person.toPrettyString())
这会使您的意图更加清晰。
答案 3 :(得分:0)
只需使用data class
fun main(args: Array<String>){
var person = Person("Jimmy")
println(person)
}
data class Person(val name: String, var age = 10)
输出为
Person(name=Jimmy,age=10)
如果您想精确输出“吉米”,则输出name
字段:)
fun main(args: Array<String>){
var person = Person("Jimmy")
println(person.name)
}