Почему `Some (123 ).isInstanceOf[Option[List[String]]]`*не *выдает непроверенное предупреждение?

При использовании .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.)

15
задан Mechanical snail 19 July 2012 в 05:14
поделиться