Kotlin的范围-暴露单个入口点

时间:2018-08-22 18:25:12

标签: kotlin

您好,我有一个关于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示波器的工作方式?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您必须声明构造函数internalprivate并提供另一个 函数/构造函数来创建您的服务:

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() {

    }
}