Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
Java Scala重载方法_Java_Scala - Fatal编程技术网

Java Scala重载方法

Java Scala重载方法,java,scala,Java,Scala,我对这段代码(未编译)有一点疑问: 这个想法很简单,如上图所示,第一种方法计算一系列整数的平均值,第二种方法计算一系列双倍数的平均值 但是它给了我一个关于重复的编译错误,我想知道为什么…如果你有比这段代码更大的Scala方法来执行相同的想法,请在你的答案中分享 谢谢你这个问题是由于类型擦除造成的,可以通过使用Numerictype类来解决 def avg[N:Numeric](ns :Seq[N]) :Double = implicitly[Numeric[N]].toDouble(ns.s

我对这段代码(未编译)有一点疑问:

这个想法很简单,如上图所示,第一种方法计算一系列整数的平均值,第二种方法计算一系列双倍数的平均值

但是它给了我一个关于重复的编译错误,我想知道为什么…如果你有比这段代码更大的Scala方法来执行相同的想法,请在你的答案中分享
谢谢你

这个问题是由于类型擦除造成的,可以通过使用
Numeric
type类来解决

def avg[N:Numeric](ns :Seq[N]) :Double =
  implicitly[Numeric[N]].toDouble(ns.sum) / ns.length

avg(List(3, 5, 7, 11))           //res0: Double = 6.5
avg(Vector(9.2, 3.3, 1.7, 21.1)) //res1: Double = 8.825
您还可以将其放置在隐式类中,以获得更简洁的表达式

implicit class GetAvg[N:Numeric](ns :Seq[N]) {
  def avg :Double = implicitly[Numeric[N]].toDouble(ns.sum) / ns.length
}

Stream(3, 5, 7, 11).avg      //res2: Double = 6.5
Seq(9.2, 3.3, 1.7, 21.1).avg //res3: Double = 8.825

这个问题是由于类型擦除造成的,可以通过使用
Numeric
type类来克服

def avg[N:Numeric](ns :Seq[N]) :Double =
  implicitly[Numeric[N]].toDouble(ns.sum) / ns.length

avg(List(3, 5, 7, 11))           //res0: Double = 6.5
avg(Vector(9.2, 3.3, 1.7, 21.1)) //res1: Double = 8.825
您还可以将其放置在隐式类中,以获得更简洁的表达式

implicit class GetAvg[N:Numeric](ns :Seq[N]) {
  def avg :Double = implicitly[Numeric[N]].toDouble(ns.sum) / ns.length
}

Stream(3, 5, 7, 11).avg      //res2: Double = 6.5
Seq(9.2, 3.3, 1.7, 21.1).avg //res3: Double = 8.825

不是scala开发者,但是如果scala中的
[…]
表示Java的泛型
,那么它可能会遇到与Java相同的问题,因为在Java中泛型类型在编译后被擦除,所以我们不能有
方法(列表)
方法(列表)
,因为这两种方法都将被简化为
方法(列表)
编译后。可能相关:可能重复:您是对的@Pshemo感谢您的帖子它真的很有帮助还可以看看问题,了解scalaNot scala developer中的方法重载限制,但是如果
[…]
在scala中表示Java的泛型类型
那么它可能会遇到与Java相同的问题,因为在Java中泛型类型在编译后会被删除,所以我们不能有
方法(列表)
方法(列表)
,因为这两种方法都将被简化为
方法(列表)
编译后。可能相关:可能重复:您是对的@Pshemo感谢您的帖子它真的很有帮助还可以看看问题,了解scala中的方法重载限制