scala> ////////////////////////////////////////////////////////////////
scala> // Typed Pattern : Pattern Matching a Type
scala> ////////////////////////////////////////////////////////////////
scala> def patternFn(x: Any) = x match {
| //
| case b: List[_] => println("List...")
|
| // This do not work because of type erasure #318
| case c: Map[Int, Int] => println("This is wrong...")
|
| case d: Map[_, _] => println("Map: This does work")
|
| // We dot have issue of Type Erasure with Array
| case e: Array[Int] => println("Array of Int...")
|
| case f: Array[_] => println("Array of other types...")
| }
<console>:28: warning: non-variable type argument Int in type pattern scala.collection.immutable.Map[Int,Int] (the underlying of Map[Int,Int]) is unchecked since it is eliminated by erasure
case c: Map[Int, Int] => println("This is wrong...")
^
<console>:30: warning: unreachable code
case d: Map[_, _] => println("Map: This does work")
^
patternFn: (x: Any)Unit
scala>
scala> // Not expected result because of type erasure
scala> patternFn(Map[Int, String](1 -> "a", 2 -> "b"))
This is wrong...
scala> // Expected result : For Array we do not have the issue of
scala> // type erasure
scala> patternFn(Array[Int](1, 2, 3))
Array of Int...
scala> patternFn(Array[Double](1.2, 2,2))
Array of other types...