gpt4 book ai didi

kotlin - 是否可以在 Kotlin 中创建 "extension class"?

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

我目前正在处理一个处理大量硬件的 Kotlin 项目,并且我一直在寻找一种方法来创建类似于扩展函数的东西,除了一个类。在这种情况下,我希望一个类充当另一个类的子类,但仍要分开并放在另一个包中。通常,我会像这样使用这个类:

class Foo() {
fun doSomething() {
...
}
}
class Bar(val foo: Foo) {
fun doSomethingWithFoo() {
foo.doSomething()
}
}
val myFoo = Foo()
val myBar = Bar(myFoo)
myBar.doSomethingWithFoo()
是否可以通过扩展功能做一些事情来使这段代码更具可读性?
// Is this possible?
val myFoo = Foo()
val myBar = myFoo.Bar()
myBar.doSomethingWithFoo()
我现在将使用包装器扩展功能作为替代方案,但我想知道这是否可以直接实现。
// Wrapper function I'm using
fun Foo.Bar(): Bar {
return Bar(this)
}

最佳答案

看起来你描述的是一个 delegate :一个将其所有方法(除非被覆盖)转发到不同类的实例的类。
Kotlin 对此具有内置支持(与 Java 不同),但要使其工作,两个类都需要实现一个接口(interface):

interface MyInterface {
fun doSomething()
}

class Foo() : MyInterface {
override fun doSomething() {
// ...
}
}

class Bar(val foo: MyInterface) : MyInterface by foo
这与问题中的代码几乎相同,但没有手动指定 doSomething() 转发的样板。 .
狡猾的部分是无辜的 by foo : 它指定 Bar是一个代表,实现所有 MyInterface方法,将它们转发到 foo . (当然,您可以根据需要添加和覆盖方法——委托(delegate)中的行为与它转发到的对象完全一样没有什么意义!)
如需更多信息,请参阅 Kotlin documentation .

关于kotlin - 是否可以在 Kotlin 中创建 "extension class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63298120/

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