Cho một đơn giản Loại đại số dữ liệu của Parent
:Trait bất ngờ hành vi
scala> sealed trait Parent
defined trait Parent
scala> case object Boy extends Parent
defined object Boy
scala> case object Girl extends Parent
defined object Girl
tôi xác định một đặc điểm:
scala> trait HasGirl {
| val x: Girl.type
| }
defined trait HasGirl
Sau đó, tôi tạo ra một lớp trường hợp đó thực hiện HasGirl
, nhưng cung cấp một giá trị x
của Boy.type
.
scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
tôi đã mong đợi một lỗi thời gian biên dịch, vì tôi không thấy làm thế nào một x
loại Boy.type
phù hợp với val x: Girl.type
.
Điều gì đang xảy ra ở đây?
Là 'x' trong' Thing' liên quan đến 'x' trong đặc điểm? –
Vâng, 'Thing' mở rộng' HasGirl'. Vì sau này mong đợi một 'x' kiểu' Girl.type', tôi * tin rằng '' '' '' '' '' 'của' Thing' ánh xạ tới '' '' của 'HasGirl'. –
Thật vậy, 'Thing (Boy) .asInstanceOf [HasGirl] .x' tạo' java.lang.ClassCastException: Boy $ không thể được truyền vào Girl $ '. Hấp dẫn. – ale64bit