有没有办法在Kotlin中扩展功能?

时间:2018-01-24 10:14:33

标签: kotlin

我最好用代码解释一下这个场景。

  object Helper{
    fun getValuesForBlah1(constParam1 : Boolean, constParam2 : String, constParam3 : Float, varParam : Int)

    fun getValuesForBlah2(constParam1 : Boolean, constParam2 : String, constParam3 : Float, varParam : SomeClass)

    fun getValuesForBlah3(constParam1 : Boolean, constParam2 : String, constParam3 : Float, varParam : SomeOtherClass)
...
....
    }

如果查看所有函数,那么所有函数都有一组公共参数和rest变量参数。有没有办法告诉抽象出常见的参数,以便我不必在所有功能中重复它们? 的修改

@Google在下面给出了一个很好的答案。但我正在寻找一种可以使用某种语言功能解决它的方法。例如,在scala中,它可以使用隐式解决(我不确定)?

2 个答案:

答案 0 :(得分:2)

只需创建包含常用参数的类:

object Helper {

    data class Param(
        val constParam1: Boolean,
        val constParam2: String,
        val constParam3: Float
    )

    fun getValuesForBlah1(param: Param, varParam : Int)

    fun getValuesForBlah2(param: Param, varParam : SomeClass)

    fun getValuesForBlah3(param: Param, varParam : SomeOtherClass)

}

答案 1 :(得分:1)

你可以使用Kotlin的Any Class。任何都是Kotlin类层次结构的根。每个Kotlin类都有Any作为超类。在你的情况下,你可以实现你的方法,如:

object Helper {

    fun getValuesForBlah(constantParam1: Boolean, constantParam2: String, constantParam3: Float, varParam: Any) {
        if (varParam is Int) {

        } else if (varParam is SomeClass) {

        } else if (varParam is SomeOtherClass) {

        }
        ....
        ....
    }
}

更新: 在OOP方法中,您可以执行以下操作:

object Helper {

    data class Param(
        val constParam1: Boolean,
        val constParam2: String,
        val constParam3: Float,
        var varParam: Any
    )

    fun getValuesForBlah(param: Param){
            if (param.varParam is Int) {

            } else if (param.varParam is SomeClass) {

            } else if (param.varParam is SomeOtherClass) {

            }
            ....
            ....
      }

}

希望它对你有所帮助。 :)