當使用.isInstanceOf[GenericType[SomeOtherType]]
,其中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[]
一般類型語法糖)
爲什麼沒有發出警告? (所有這些都在斯卡拉REPL 2.9.1,與-unchecked
選項。)
大調查! – 2012-07-19 08:06:30
的確,工作很好! – pedrofurla 2012-07-19 14:46:52
用於引用編譯器。 :-) – 2012-07-19 18:03:19