fun <T> doSum(a: T, b: T) : T {
val result : Number = when {
a is Int && b is Int -> a + b
a is Long && b is Long -> a + b
a is Float && b is Float -> a + b
a is Double && b is Double -> a + b
else -> throw IllegalArgumentException()
@Suppress("UNCHECKED_CAST")
return result as T
}
fun <T: Number> doOperation(a: T, b: T, operationToPerform: (T, T) -> T ) {
println(operationToPerform(a, b))
}
У меня есть метод doOperations, который принимает обобщенную функцию в качестве параметра, который я намерен запустить на двух других переданных параметрах.
Тем не менее, вызывая то же самое в основном как:
fun main(args: Array<String>) {
doOperation (2, 3, doSum)
}
возвращает ошибки типа:
Error:(15, 24) Kotlin: Function invocation 'doSum(...)' expected
Error:(15, 24) Kotlin: No value passed for parameter 'a'
Error:(15, 24) Kotlin: No value passed for parameter 'b'
Есть предложения по вызову doOperation с помощью doSum ()?
(& при изменении doSum на doSum выдает еще одну ошибку:
Ошибка: (15, 24) Kotlin: введите параметр связывается с T в fun doSum (a: T, b: T): T
не удовлетворено: предполагаемый тип (Int, Int) -> Int не является подтипом числа)