您好,我有一个关于kotln范围的简单问题。我总是设计模块以获取模块的单个入口点。这只是一个(确切的一个)public
类。我真的很喜欢这种隐喻。因此,想象一下这两个类(请注意软件包):
package group.moduleA.service
internal class HiddenService() {
fun someFunction {
}
}
package group.moduleA.service
class Service(private val hiddenService: HiddenService) {
fun someFunction {
}
}
因此,我们在同一包中有2个类,一个是public
,第二个是internal
。您可以想象那里有很多internal
类。我只想让Service
类对其他模块可见。 Java中非常常见的行为(对我而言)。在Kotlin中出现错误:
“公共函数公开其内部参数...”
我是在做错什么,还是Kotlin示波器的工作方式?我该如何解决这个问题?
答案 0 :(得分:1)
您必须声明构造函数internal
或private
并提供另一个
函数/构造函数来创建您的服务:
class Service internal constructor(private val hiddenService: HiddenService) {
constructor() : this(HiddenService())
fun someFunction() {
}
}
答案 1 :(得分:0)
Dependency inversion principle是一个很好的起点:
internal class HiddenServiceImpl : HiddenService {
override fun someFunction() {
}
}
interface HiddenService {
fun someFunction()
}
class Service(private val hiddenService: HiddenService) {
fun someFunction() {
}
}
其他选项是使用工厂方法:
class Service private constructor(hiddenService: HiddenService) {
companion object {
fun create() = Service(HiddenService())
}
fun someFunction() {
}
}