我有一个下面展示的扩展函数
infix fun List<Int>.sumList(that: List<Int>) =
this.zip(that, Int::plus)
我现在正在尝试将这个扩展函数泛型化,使它可以处理整数、浮点数和双精度数的列表。
listOf(1,2,3).sumList(listOf(10,20,30))
将给出 [11, 22, 33]
以下是我尝试使用泛型编写相同扩展函数的代码:
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)
}
然而,在 T 处,我遇到了编译器错误,显示类型参数不是表达式。有人能帮我解决这个错误并说明产生该错误的原因吗?
sum
方法,而不是sumInts
、sumDoubles
等等。虽然这也可以通过使用@JvmName("sumInts")
、@JvmName("sumDoubles")
等方式来解决。 - Slawwhen(T::class) { Double::class -> (this as List<Double>).zip(that as List<Double>, Double::plus) as List<T>
。这会生成很多常规代码,但我仍然认为你应该使用重载并且在需要时加上@JvmName
注解。无论如何,这个函数从 Java 中也无法使用。 - broot