Closed
Description
See also https://issues.scala-lang.org/browse/SI-7453
In scalac
:
scala> if (false) Array("qwe") else Array()
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
In dotty, thankfully:
scala> if (false) Array("qwe") else Array()
res1: Array[String] | Array[Nothing] = [Ljava.lang.Object;@1dd92fe2
But still in dotty:
scala> val x = if (false) Array("qwe") else Array()
x: Array[String] | Array[Nothing] = [Ljava.lang.Object;@5454d35e
scala> val y: Array[_ <: String] = x
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
We either need to disallow Array[Nothing]
, Array[Null]
, etc or we need to erase Array[_ <: X]
to Object
instead of [X;
.
It would also be much nicer if we could infer the empty array above to have type Array[String]
instead of Array[Nothing]
, I don't know what prevents us from doing this currently.