我想要有一个接口/抽象类B
,它要求实现者A
有一个公共构造函数,并且还实现了一组内部只有成员.以便其他模块可以构造A
,但不能使用其上的内部方法.
一些内部成员表示与此模块中的其他类相同的功能性,因此我为它们创建了一个接口I
,以允许在useI
等函数中进行组合和使用.
另外,我不能把I
作为一个抽象类,因为它被用在已经有super的类上,而多重继承在Kotlin中是不可能的.
我想出了这一点,但它不起作用,因为实现的接口的成员是公共的,我无法更改这一点.我可以将I
设置为公共的,但这将意味着将许多内部类型和内容公开为公共的(实际上几乎所有模块),这不应该与其他模块有任何关系.
public abstract class B : I {
internal abstract fun doStuff()
}
internal interface I {
fun doOtherStuff()
}
public class A : B() {
internal override fun doStuff() {
// ...
}
internal override fun doOtherStuff() { // This is not possible in kotlin?
// ...
}
}
internal fun useI(i: I) = ...
useI(A())
对我来说,这样的事情似乎很奇怪,不可能像Kotlin 那样使用如此高级的语言,所以我错过了什么?我怎么发动汽车呢?