【问题标题】:BodyKt$main$Person@35cabb2a what is it? And can I get properties of it?BodyKt$main$Person@35cabb2a 是什么?我可以得到它的属性吗?
【发布时间】:2019-09-16 11:39:56
【问题描述】:

我创建类的对象并尝试复制它。

我试图获取对象的属性但得到了这个:

Properties of Ann: Name: Ann Age: 10 Type: man High: 0.5 Code: 1408
Properties of Bob: Name: Bob Age: 20 Type: girl High: 15.0 Code: 1239
Default: Name: Orig Age: 18 Type: piece High: 25.7 Code: 1522
Bob has Anns' props: Name: Ann Age: 10 Type: man High: 0.5 Code: 1408
Default list: [BodyKt$main$Person@35cabb2a]

代码:

fun main() {
    // copy object in object
    class Person (var name: String = "Orig", var type: String = "piece",
                       var age: Int = 18, var high: Double = 25.7, var code: Int = 1522)
    {
        var info: String = "0"
            get() = "Name: $name Age: $age Type: $type High: $high Code: $code"
        val somebody
            get () = listOf(Person("Copy", "some", 15, 11.1, 1870))
    }
    var default: Person = Person()
    val ann: Person = Person("Ann", "man", 10, 0.5, 1408) // 1st object with some properties
    var bob: Person = Person("Bob", "girl", 20, 15.0, 1239) // 2nd object without prop
    println("Properties of Ann: ${ann.info}") // props 1st object
    println("Properties of Bob: ${bob.info}") // props 2nd object
    println("Default: ${default.info}") // props default
    bob = ann.deepCopy() // copy 1st in 2nd
    println("Bob has Anns' props: ${bob.info}") // new props 2nd object
    println("Default list: ${default.somebody}")
}

默认列表:[BodyKt$main$Person@35cabb2a] 这是什么?

【问题讨论】:

    标签: class kotlin copy deep-copy


    【解决方案1】:

    这是the default toString implementation 的结果,因为您没有为Person 覆盖它:BodyKt$main$Person 是 JVM 类名,因为它是在 main 中定义的。

    看起来您的 info 应该被 toString 覆盖:

    fun main() {
        // copy object in object
        class Person (var name: String = "Orig", var type: String = "piece",
                           var age: Int = 18, var high: Double = 25.7, var code: Int = 1522)
        {
            override fun toString() = "Name: $name Age: $age Type: $type High: $high Code: $code"
            val somebody
                get () = listOf(Person("Copy", "some", 15, 11.1, 1870))
        }
        var default: Person = Person()
        val ann: Person = Person("Ann", "man", 10, 0.5, 1408) // 1st object with some properties
        var bob: Person = Person("Bob", "girl", 20, 15.0, 1239) // 2nd object without prop
        println("Properties of Ann: $ann") // props 1st object
        println("Properties of Bob: $bob") // props 2nd object
        println("Default: $default") // props default
        bob = ann.deepCopy() // copy 1st in 2nd
        println("Bob has Anns' props: $bob") // new props 2nd object
        println("Default list: ${default.somebody}")
    }
    

    【讨论】:

    • 非常感谢!你能给我一些关于资源的建议吗?我可以通过一些例子来了解更多关于 Kotlin 的知识吗?
    • kotlinlang.org/docs/reference/basic-syntax.html?如果不更具体地说明您不了解的内容,则很难回答。
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2017-10-08
    • 2015-08-08
    • 2021-12-11
    • 2011-04-10
    • 2017-02-10
    相关资源
    最近更新 更多