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

How to access extension property inside object from outside class?

示例:

class Foo {
    fun foo() = Unit
}

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

fun Foo.bar() = Bar.foo

扩展符号在 class 实例中时不是静态的,所以我不明白为什么这不能通过简单地传入接收器来实现。

你可以这样做,但你必须将 Bar 也作为接收者带入上下文,同时引用 someFoo.foo 否则你会说 Bar 有一个属性 foo 它没有。它在其范围(及其实例)内具有 Foo.foo 的扩展名。因此,将您的最后一行更改为:

fun Foo.bar() = Bar.foo

至:

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

概念上是这样的:

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

所以我们使用withBar接收器堆叠在this@barFoo实例接收器下并访问属性foo .