1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
object Main {
def mkArray[T <: A](atype: Int) :T#AType = {
(atype match {
case 1 =>
new Array[Int](10)
// Decompiled code: return (Object[])new int[10];
case 2 =>
new Array[Float](10)
}).asInstanceOf[T#AType]
}
def main(args: Array[String]) {
println(mkArray[I](1))
//java.lang.ClassCastException: [I cannot be cast to [Ljava.lang.Object;
}
}
trait A {
type AType <: AnyRef
}
trait I extends A {
type AType = Array[Int]
}
trait F extends A {
type AType = Array[Float]
}
|