有没有办法扩展Kotlin中的函数?

有没有办法扩展Kotlin中的函数?,kotlin,Kotlin,我最好用代码来解释这个场景 object Helper{ fun getValuesForBlah1(constParam1 : Boolean, constParam2 : String, constParam3 : Float, varParam : Int) fun getValuesForBlah2(constParam1 : Boolean, constParam2 : String, constParam3 : Float, varParam : SomeCla

我最好用代码来解释这个场景

  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变量参数。有没有一种方法可以告诉抽象出常见的参数,这样我就不必在所有函数中重复它们了? 编辑


@谷歌在下面给出了一个很好的答案。但我正在寻找一种方法,通过使用某种语言特性来解决这个问题。对于scala中的eg,可以使用隐式(但我不确定)解决它。

只需创建包含公共参数的类:

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)

}
你可以用科特林的。Any是Kotlin类层次结构的根。每个Kotlin类都有一个超类。在您的情况下,您可以实现以下方法:

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

            }
            ....
            ....
      }

}

希望对您有所帮助。:)

很好的回答:)但是正在寻找一种使用某种语言功能来解决这个问题的方法。Lilke对于scala中的eg,它可以使用隐式解决(虽然我不确定)?没有语言特性可以解决您的问题problem@Ashwin这可以通过联合类型来解决,联合类型是一个经常需要的特性,但是语言设计者不愿意将它们添加到Kotlin中(它们会给混合带来很多复杂性)。看这个。