Closed
Description
Minimized code
type Numeric = Double | Int
val v1 = 100
val v2 = 100.0
def check1(i: Double | Int | String): Unit = {
i match {
case a:(Double | Int) => println(s"numeric = $a")
case _ => println("categorical")
}
}
/*
[warn] 25 | case a:Numeric => println(s"numeric = $a")
[warn] | ^^^^^^^^^
[warn] | the type test for gg.SlidingIssue.Numeric cannot be checked at runtime
[warn] one warning found
*/
def check2(i: Double | Int | String): Unit = {
i match {
case a:Numeric => println(s"numeric = $a")
case _ => println("categorical")
}
}
Output
[warn] 25 | case a:Numeric => println(s"numeric = $a")
[warn] | ^^^^^^^^^
[warn] | the type test for gg.SlidingIssue.Numeric cannot be checked at runtime
[warn] one warning found
Expectation
I expected that using union types directly or using a type alias should produce the same result. However when using a type alias in a match (in check1
) I get the warning when using a type but not when using the unon type directly (check2
).
This does not seem to happen consistently all the time.
Tested with 0.24.0-RC1