首页 > 解决方案 > Kotlin:如何将数据成员的属性传递给自己的属性?

问题描述

有两个班。第一类有公共财产。第二个类有一个私有数据成员,它是第一个类的一个实例和一个公共属性:

class A {
    var s = "test"
}

class B {
    private var a = A ()
    public val prop = a.s
}

我希望道具是作为财产的参考。如果我们读取 prop,我们会得到存储在 as 中的值。如果我们写入 prop,则新值存储在 as 如果 as 的内容在其他地方发生变化,那么 prop 也应该相应地更新。这可以通过简单的方式完成吗?我试图这样做,就像在这段代码中一样public val prop = a.s,但这不起作用 - 属性之间没有连接。

Kotlin 中是否有一种简单的方法可以引用另一个类的属性?

标签: classkotlinproperties

解决方案


属性之间没有联系

好吧,它们都引用了堆内存中的同一个 String 对象,它们完全相同。

但是,如果您覆盖对A.s另一个 String 对象的引用,则A.s持有新引用并B.prop持有旧引用

那么如何解决这个问题呢?

您可以简单地将 getter 委托B.propA.sKotlin。

class A {
    var s = "test"
}

class B {
    private var a = A ()
    val prop: String
        get() = a.s
}

推荐阅读