.isInstanceOf[GenericType[SomeOtherType]]
、 whereGenericType
およびSomeOtherType
が (適切な種類の) 任意の型を使用している場合、Scala コンパイラは型の消去が原因で unchecked 警告を出します。
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 にあります。)