Home > Enterprise >  Kotlin list extension function
Kotlin list extension function

Time:07-25

I have an extension function shown below

infix fun List<Int>.sumList(that: List<Int>) =
    this.zip(that, Int::plus)

I am now trying to make this extension function generic so that it works on list of integers as well as float and double.

listOf(1,2,3).sumList(listOf(10,20,30)) gives me [11, 22, 33]

Below is my attempt of writing the same extension function using generics

inline infix fun <reified T: Number> List<T>.sumListNew(that: List<T>): List<T> = when {
    T is Double -> this.zip(that, Double::plus)
    else -> this.zip(that, Int::plus)
}

However I am getting compiler error at T saying type parameter is not an expression. Can someone help me resolve this error and also reason for getting this error?

CodePudding user response:

Perhaps you may do it this way by having one sum method and just overriding the plus operator for Number:

operator fun Number.plus(a : Number) : Number{
    return when(this::class){
        Int::class -> this.toInt()   a.toInt()
        Double::class -> this.toDouble()   a.toDouble()
        else -> error("Data Type not found!")
    }
}

inline infix fun <reified T: Number> List<T>.sumListNew(that: List<T>): List<T>{
    return this.zip(that,Number::plus) as List<T>
}
  • Related