我已经定义了一个类并为其分配了一个值,但是当我尝试访问该值时,我得到了一个 @,后面跟着一串十六进制数字。我在 Kotlin 官方文档或网上找不到任何信息。有人能告诉我发生了什么以及如何获取我需要的值吗?
这是一项 Hyperskill 任务。
程序如下:
open class Character(val name: String)
class Jedi(name: String, val age: Int) : Character(name)
class Sith(name: String, val hasMask: Boolean) : Character(name)
fun characterBuilder(input: String): Character {
val (name, type, other) = input.split("-")
return when (type) {
"jedi" -> Jedi(name, other.toInt())
"sith" -> Sith(name, other.toBoolean())
else -> throw IllegalArgumentException("Unknown character type: $type")
}
}
fun main() {
val list = "luke-jedi-25 leia-jedi-25 darkvader-sith-true darksidiuos-sith-false".split(" ")
val characters = list.map { characterBuilder(it) }
// code won't recognize value of variable
//val (jedis, siths) = characters.partition { character -> character.type == "jedi" }
for (character in characters) { println(character) }
// println("jedis: ${jedis.size}, siths: ${siths.size}")
}
输出为:
Jedi@728938a9
Jedi@21b8d17c
Sith@6433a2
Sith@5910e440
只有 a
data class
会自动获取toString
和hashCode
和equals
方法。您的类不是数据类,因此它们默认为toString
打印类名和哈希码的普通旧 Java 方法。您可以像这样手动定义
toString
:或者,您可以将类设为数据类,但数据类与继承配合得不好。就您而言,您只有
name
来自基类的共享,因此您可以轻松地复制它:这将打印:
显然,您可以修改自制内容
toString
以包含您想要的任何值。