ein einfacher algebraischer Datentyp Parent
Gegeben:Unexpected Trait Verhalten
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
ich ein Merkmal definiert:
scala> trait HasGirl {
| val x: Girl.type
| }
defined trait HasGirl
Dann hat ich einen Fall, Klasse geschaffen, die HasGirl
implementiert, sondern gibt einen x
Wert von Boy.type
.
scala> case class Thing(x: Boy.type) extends HasGirl
defined class Thing
Ich hatte einen Fehler bei der Kompilierung zu erwarten, da ich sehe nicht, wie ein x
vom Typ Boy.type
-val x: Girl.type
entspricht.
Was geht hier vor?
Ist das 'X' in 'Thing' verwandt mit dem 'x' im Merkmal? –
Nun, 'Thing' erweitert' HasGirl'. Da letztere ein 'x' vom Typ' Girl.type' erwartet, glaube ich *, dass 'Thing's 'x: Boy.type' auf' HasGirl's 'x' verweist. –
In der Tat, 'Thing (Boy) .asInstanceOf [HasGirl] .x' produziert' java.lang.ClassCastException: Boy $ kann nicht zu Girl $ 'gewandelt werden. Interessant. – ale64bit