Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何从类外部访问对象内部的扩展属性?_Kotlin_Kotlin Extension - Fatal编程技术网

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。谢谢仍然报告了它,因为这真的不必要:这是必要的,上下文中有两个接收者,必须提供它们。这已经被报道为,并且给出了相同的答案。哦,天才。谢谢仍然报告了它,因为这真的不必要:这是必要的,上下文中有两个接收者,必须提供它们。这一点已被报告为,并给出了相同的答案。