有没有办法扩展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中(它们会给混合带来很多复杂性)。看这个。