【问题标题】:Can I use an extension *member* from outside the class? [duplicate]我可以在课堂外使用扩展 *member* 吗? [复制]
【发布时间】:2019-03-21 14:07:13
【问题描述】:

如果我在 B 类中声明了类型 A 的扩展函数:

class A

class B {
    fun A.foo() = "Hello"
}

我可以从 B 类之外的代码中调用这个函数吗?

val a = A()
val b = B()
a.foo()      // error: unresolved reference: foo
b.foo()      // error: unresolved reference: foo

【问题讨论】:

  • 这段代码看起来甚至无法编译。诚然,我不是 Kotlin 专家,但是......也许你可以展示更多代码? Kotlin 是否有您忘记包含的访问修饰符?
  • @RobertHarvey 第一部分肯定会编译。第二部分不会,因为扩展方法 A.foo 不像错误所说的那样在全局范围内。
  • @RobertHarvey 唯一不能编译的部分是我说会有错误的地方:play.kotlinlang.org/…

标签: kotlin extension-function


【解决方案1】:

是的:

with(b) { 
    a.foo() 
} 

接受带有B 接收器的 lambda 的其他函数也可以工作。

【讨论】:

    【解决方案2】:

    不,当您在 B 中定义 A.foo 时,您已经有效地将函数范围限定为类。但是,您总是可以将它移到类之外...函数也可以是顶级的 :)

    【讨论】:

    • 其实可以的。
    猜你喜欢
    • 2022-01-26
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2015-08-30
    • 2022-11-22
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多