gpt4 book ai didi

kotlin - 使用其他地方的内部对象访问 Kotlin 外部类

转载 作者:行者123 更新时间:2023-12-02 12:45:13 24 4
gpt4 key购买 nike

我有以下设置:


class A {
fun runA() {

}
inner class B {
fun runB() { // Proxy method for runA()
runA() // its okay to call it here
}
}
}

fun test() {
val obj = A().B()
obj.runA() // how to call this one??
obj.runB() // i do not want to add a proxy method for everything in A
}

有什么方法可以调用 runA()当我只有 B 对象时?
B 的每个实例总是耦合到 A 的一个实例,因此理论上应该是可能的(并且我能够从 B 中调用 runA() 证明了这一点)

我目前拥有的最佳解决方案是在 B 中提供 A 的访问器,如下所示:

    inner class B {
fun a(): A = this@A
fun runB() {
runA()
}
}

然后将其称为 obj.a().runA()
如果我可以直接调用 obj.runA()就好了,除了编译器不允许它之外,我看不出它在技术上不应该是可行的原因。

感谢您的输入!

最佳答案

B不是 A .编译器给出 B私有(private)引用他自己的A , 因为他需要它来执行 runA .但它是私有(private)的,并不意味着你可以从那里访问。你可以写runA它在 runB 内部工作因为内部类在范围内具有父类的所有成员,有点像使用闭包时。请参阅与此示例的类比:

class A {
fun runA() {

}
fun B {
{
runA() // its okay to call it here
}
}
}

fun test() {
val obj = A().B()
obj()
}

与您在内部类中看到的类似,在调用成员 B() 时创建的闭包对象内部您可以访问范围内的所有变量(包括用于调用 AB() 的实例)。

如果你想要一个对象 B拥有 A 的所有成员您可能应该看看继承而不是内部类。或向 A 公开访问器像你一样的例子。

关于kotlin - 使用其他地方的内部对象访问 Kotlin 外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61759048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com