如何从外部类访问对象内部的扩展属性?

时间:2018-08-25 19:00:23

标签: kotlin kotlin-extension

示例:

class Foo {
    fun foo() = Unit
}

object Bar {
    val Foo.foo get() = Unit
}

fun Foo.bar() = Bar.foo

扩展符号在类实例中时不是静态的,所以我不明白为什么仅仅通过传入接收器就不可能实现这一点。

1 个答案:

答案 0 :(得分:2)

您可以执行此操作,但是您还必须将Bar作为接收者,以及对someFoo.foo的引用,否则您将说Bar具有属性{ {1}},但不是。它在其范围(及其实例)中具有foo的扩展名。因此,请从以下位置更改您的最后一行:

Foo.foo

收件人:

fun Foo.bar() = Bar.foo

从概念上来说是这样的:

fun Foo.bar() = with (Bar) { foo }

因此,我们使用fun Foo.bar() = with (Bar) { this@bar.foo } with接收者堆叠在Bar的{​​{1}}实例接收者之下,并访问属性Foo