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