При использовании .isInstanceOf[GenericType[SomeOtherType]], где GenericType и SomeOtherType являются произвольными типами (подходящего типа), компилятор Scala дает непроверенное предупреждение из-за стирания типа:
scala> Some(123).isInstanceOf[Option[Int]]
<console>:8: warning: non variable type-argument Int in type Option[Int] is unchecked since it is eliminated by erasure
Some(123).isInstanceOf[Option[Int]]
^
res0: Boolean = true
scala> Some(123).isInstanceOf[Option[String]]
<console>:8: warning: non variable type-argument String in type Option[String] is unchecked since it is eliminated by erasure
Some(123).isInstanceOf[Option[String]]
^
res1: Boolean = true
Однако, если SomeOtherType сам является общим типом (например, List[String]), не выдается предупреждение:
scala> Some(123).isInstanceOf[Option[List[String]]]
res2: Boolean = true
scala> Some(123).isInstanceOf[Option[Option[Int]]]
res3: Boolean = true
scala> Some(123).isInstanceOf[Option[List[Int => String]]]
res4: Boolean = true
scala> Some(123).isInstanceOf[Option[(String, Double)]]
res5: Boolean = true
scala> Some(123).isInstanceOf[Option[String => Double]]
res6: Boolean = true
(напомним, что кортежи и => являются синтаксическим сахаром для Tuple2[] и Function2[] общих типов)
Почему не выдается предупреждение? (Все они находятся в Scala REPL 2.9.1 с опцией -unchecked.)