GenericType
とSomeOtherType
は、(適した種類の)任意の種類がある.isInstanceOf[GenericType[SomeOtherType]]
を使用して、Scalaのコンパイラが原因型消去に未チェックの警告を与える:しかし`Some(123).isInstanceOf [Option [List [String]]]` *は*未確認の警告を出さないのですか?
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[]
ジェネリック型のシンタックスシュガーであることを思い出してください)
警告が表示されないのはなぜですか? (これらのすべてが-unchecked
オプションで、ScalaのREPL 2.9.1である。)
偉大な調査! –
確かに、良い仕事! – pedrofurla
コンパイラの引用符は+1です。 :-) –