kotlin中是否有一种方法可以追溯应用接口或具有类似的函数/类型。
我使用生成器生成多个类。生成器不允许声明这些类实现的接口。相反,它们都实现了相同的功能。让我们调用类A、B和C,A、B和C都有名为f1、f2和f3的函数,但它们是单独实现的,不是接口实现的结果。
现在,我想将一个函数声明为一个参数,它的类型类似于接口,它适合A、B和C,并且能够使用f2和f3。我在Kotlin网站上看到了一个与这个问题相似的问题,但是找不到像这样的东西。显然,Go可以做这样的事情。虽然它的形式有点奇怪,而且没有使用close函数,但是它可能没有确切地显示我在这里想要做的事情。
我寻找这样的东西:
class A {
fun f1 (string: String) {}
fun f2 (int: Int) {}
fun f3 () {}
}
class B {
fun f1 (string: String) {}
fun f2 (int: Int) {}
fun f3 () {}
}
class C {
fun f1 (string: String) {}
fun f2 (int: Int) {}
fun f3 () {}
}请再次注意:这两个类都没有接口实现。
我想要一个对他们都有用的函数。就像这样:
typeContract CollectiveABC {
fun collectiveF2 (int: Int) {}
fun collectiveF3 () {}
}或者这个
collectiveType CollectiveABC {
classes: A, B, C
collectiveF2: A.f2, B.f2, C.f2
collectiveF3: A.f3, B.f3, C.f3
}像这样使用:
fun collectiveUse(objABC: CollectiveABC) { // <- Collective type used here allows for defining one behaviour for all three classes
obj.collectiveF2(12345)
obj.collectiveF3()
}
fun use() {
collectiveUse(A())
collectiveUse(B())
collectiveUse(C())
}我知道我可以将相应的函数作为参数传递如下:
fun collectiveUse(f1: (String) -> Unit, f2: (Int) -> Unit, f3: () -> Unit) { ... }
fun use() {
val a = A()
val b = B()
val c = C()
collectiveUse(a::f1, a::f2, a::f3)
collectiveUse(b::f1, b::f2, b::f3)
collectiveUse(c::f1, c::f2, c::f3)
}但是,正如您所看到的,这些函数使函数头有点长,并且通常不能很好地扩展。是否有可能做到这一点?
发布于 2021-05-25 14:03:48
在Kotlin中,接口可以同时包含抽象方法声明和方法实现。接口不能存储状态这一事实将它们与抽象类区分开来。允许它们具有属性,但它们必须是抽象的,或者给出访问器实现。
我是个初学者,这就是我所知道的。
https://stackoverflow.com/questions/67689589
复制相似问题