Al utilizar .isInstanceOf[GenericType[SomeOtherType]]
, donde GenericType
y SomeOtherType
son tipos arbitrarios (de tipo adecuado), el compilador Scala da una advertencia sin control debido al tipo de borrado:¿Por qué `Some (123) .isInstanceOf [Option [List [String]]]` * not * da una advertencia no marcada?
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
Sin embargo, si SomeOtherType
es en sí mismo un tipo genérico (por ejemplo List[String]
), sin previo aviso se emite:
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
(Recordemos que tuplas y =>
son azúcar sintáctica para Tuple2[]
y Function2[]
los tipos genéricos)
¿Por qué no se emite ninguna advertencia? (Todos estos son en el Scala REPL 2.9.1, con la opción -unchecked
.)
¡Gran investigación! –
De hecho, ¡buen trabajo! – pedrofurla
+1 para citar el compilador. :-) –