Kotlin 如何从类外部访问对象内部的扩展属性?
例如:Kotlin 如何从类外部访问对象内部的扩展属性?,kotlin,kotlin-extension,Kotlin,Kotlin Extension,例如: class Foo { fun foo() = Unit } object Bar { val Foo.foo get() = Unit } fun Foo.bar() = Bar.foo 扩展符号在类实例中不是静态的,所以我不明白为什么仅仅通过传入接收方就不可能做到这一点。您可以这样做,但您必须将条作为接收方带入上下文中,除了引用someFoo.foo之外,您还说Bar有一个它没有的属性foo。它的作用域(及其实例)中有Foo.Foo的扩展。因此,将最后一行更改为
class Foo {
fun foo() = Unit
}
object Bar {
val Foo.foo get() = Unit
}
fun Foo.bar() = Bar.foo
扩展符号在类实例中不是静态的,所以我不明白为什么仅仅通过传入接收方就不可能做到这一点。您可以这样做,但您必须将
条作为接收方带入上下文中,除了引用someFoo.foo
之外,您还说Bar
有一个它没有的属性foo
。它的作用域(及其实例)中有Foo.Foo
的扩展。因此,将最后一行更改为:
fun Foo.bar() = Bar.foo
致:
这在概念上是这样的:
fun Foo.bar() = with (Bar) { this@bar.foo }
因此,我们使用with
将条
接收器堆叠在的Foo
实例接收器下this@bar
并访问属性foo
您可以这样做,但您也必须将条作为接收者带入上下文,除了引用someFoo.foo
之外,您还说Bar
有一个它没有的属性foo
。它的作用域(及其实例)中有Foo.Foo
的扩展。因此,将最后一行更改为:
fun Foo.bar() = Bar.foo
致:
这在概念上是这样的:
fun Foo.bar() = with (Bar) { this@bar.foo }
因此,我们使用with
将条
接收器堆叠在的Foo
实例接收器下this@bar
并访问属性foo
ohhhhhh,genius。谢谢仍然报告了它,因为这真的不必要:这是必要的,上下文中有两个接收者,必须提供它们。这已经被报道为,并且给出了相同的答案。哦,天才。谢谢仍然报告了它,因为这真的不必要:这是必要的,上下文中有两个接收者,必须提供它们。这一点已被报告为,并给出了相同的答案。