我尝试在Scala中使用泛型类型,但遇到了困难。以下是我的代码片段。
import scala.reflect.ClassTag
class test[A:ClassTag] {
private val arr: Array[A] = Array.tabulate(10){ x=>
((1.0 + x) / 5.0).asInstanceOf[A]
}
def apply(i: Int): A = arr(i)
}
val obj = new test[Float]
println(obj(1))
这段代码会抛出错误
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Float
at scala.runtime.BoxesRunTime.unboxToFloat(scratch_1.scala:105)
at scala.collection.mutable.ArrayBuilder$ofFloat.$plus$eq(scratch_1.scala:460)
at scala.Array$.tabulate(scratch_1.scala:327)
at #worksheet#.test.<init>(scratch_1.scala:4)
at #worksheet#.obj$lzycompute(scratch_1.scala:11)
at #worksheet#.obj(scratch_1.scala:11)
at #worksheet#.#worksheet#(scratch_1.scala:11)
当A的类型为Double时,这段代码输出的类型也是Double。
但是当A的类型为Float时,会抛出错误。
如果您有任何反馈,将非常有用。
A
绑定到Numeric
并调用相应的toXXX
方法。 - László van den HoekfromDouble
方法,但它并不在Numeric
(或Fractional
)中。 - Alexey Romanov