Khi sử dụng .isInstanceOf[GenericType[SomeOtherType]]
, nơi GenericType
và SomeOtherType
nhiều loại tùy ý (của loại hình phù hợp), trình biên dịch Scala đưa ra một cảnh báo không được kiểm soát do chô bôi loại:Tại sao một số (123) .isInstanceOf [Tùy chọn [Liệt kê [Chuỗi]]] `* không * đưa ra một cảnh báo không được kiểm tra?
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
Tuy nhiên, nếu SomeOtherType
là bản thân một kiểu generic (ví dụ List[String]
), không có cảnh báo được phát ra:
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
(nhớ lại rằng tuples và =>
là cú pháp đường cho Tuple2[]
và Function2[]
kiểu generic)
Tại sao không có cảnh báo nào được phát ra? (Tất cả những đang ở trong Scala REPL 2.9.1, với tùy chọn -unchecked
.)
Điều tra tuyệt vời! –
Thật vậy, công việc tốt! – pedrofurla
+1 để trích dẫn trình biên dịch. :-) –