Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通用数字加法函数_Android_Generics_Kotlin - Fatal编程技术网

Android 通用数字加法函数

Android 通用数字加法函数,android,generics,kotlin,Android,Generics,Kotlin,我想用kotlin语言创建一个通用函数,该函数将添加所有类型的数字,即Double、Float、Long、Int、Byte、Char和Short。因此,我创建了一个函数: fun <T : Number> add (a: T, b: T) = a + b fun add(a:T,b:T)=a+b 但是Android Studio IDE在+符号上抛出编译时错误为Number类没有plus方法。为什么呢?请有人在kotlin中提供通用函数的解决方案,而不使用if else或whe

我想用kotlin语言创建一个通用函数,该函数将添加所有类型的数字,即Double、Float、Long、Int、Byte、Char和Short。因此,我创建了一个函数:

fun <T : Number> add (a: T, b: T) = a + b 
fun add(a:T,b:T)=a+b

但是Android Studio IDE在
+
符号上抛出编译时错误为
Number
类没有
plus
方法。为什么呢?请有人在
kotlin
中提供通用函数的解决方案,而不使用
if else
when
语句。

除非您检查它们的类型和强制转换,否则您的函数只知道它们都是数字。没有
Number.plus(Number)
函数,因此无法按原样添加它们。您可以将它们转换为双精度,然后添加它们,因为有一个
Number.toDouble()
函数。类型不需要具体化

fun <T : Number> add (a: T, b: T) = a.toDouble() + b.toDouble()
fun add(a:T,b:T)=a.toDouble()+b.toDouble()

除非检查它们的类型和强制转换,否则函数只知道它们都是数字。没有
Number.plus(Number)
函数,因此无法按原样添加它们。您可以将它们转换为双精度,然后添加它们,因为有一个
Number.toDouble()
函数。类型不需要具体化

fun <T : Number> add (a: T, b: T) = a.toDouble() + b.toDouble()
fun add(a:T,b:T)=a.toDouble()+b.toDouble()

如果参数
a
b
是Int,那么我为什么要将它们转换为double呢?您说过在使用
语句时不需要
。如果要将它们保留为Int,则需要一个
when
语句来分别处理特定情况(它们都是Int)。如果params
a
b
都是Int,那么我为什么要将它们转换为double?您说过不需要
when
语句。如果希望将它们保留为int,则需要一个
when
语句来分别处理特定情况(它们都是int)。