热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用两个组合类提供接口实现?

我有以下接口和两个类:interfaceA{funfoo()funbar()}classB{

我有以下接口和两个类:

interface A {
fun foo()
fun bar()
}
class B {
fun foo() {}
}
class C {
fun bar() {}
}

是否有可能以某种方式使用/组合这两个类来为此接口提供实现?

回答

在不更改给定代码的情况下执行此操作的一种方法是仅使用BC在新类中实现的实例A

class D : A {
private val b = B()
private val c = C() override fun foo() = b.foo()
override fun bar() = c.bar()
}

但是,这不能很好地扩展,并且需要编写样板。使用 Kotlin,您可以通过委托来实现接口,这基本上与上述完全相同,但是是自动的。但是,这需要您将接口拆分A为由B实现的部分和由 实现的部分C

interface Foo {
fun foo()
}
interface Bar {
fun bar()
}
interface A : Foo, Bar
class B : Foo {
override fun foo() {}
}
class C : Bar {
override fun bar() {}
}
class D : A, Foo by B(), Bar by C()

interface Foo {
fun foo()
}
interface Bar {
fun bar()
}
interface A : Foo, Bar
class B : Foo {
override fun foo() {}
}
class C : Bar {
override fun bar() {}
}
class D : A, Foo by B(), Bar by C()

如果需要Band 的C可配置实例,可以通过其构造函数将它们传递给 D:

如果B和/或C具有带参数的构造函数,您可以从的构造函数创建B和/或C使用参数的实例D

class D(val b: B, val c: C): A, Foo by b, Bar by c






推荐阅读
author-avatar
Laiio120669
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有