Existenztypen in der Scala

Über existenzielle Typen wenig verwirrend.

Das funktioniert bei mir:

def valueOf(c: Class[_], name: String) {
  type C = Class[T] forSome {type T <: Enum[T]}
  Enum.valueOf(c.asInstanceOf[C], name)
} 

aber das tut nicht:

def valueOf(c: Class[_], name: String) {
  type T = T forSome {type T <: Enum[T]}
  Enum.valueOf(c.asInstanceOf[Class[T]], name)
}

In meinen Augen sind beide Ausdrücke gleichbedeutend mit:

Enum.valueOf(z.asInstanceOf[Class[T] forSome {type T <: Enum[T]}], name)

Aber Scala sagt, dass es nur in meinem Kopf ist:

inferred type arguments [T] do not conform to method valueOf's type parameter bounds [T <: Enum[T]]
         Enum.valueOf(c.asInstanceOf[Class[T]], name)
              ^

Antworten auf die Frage(1)

Ihre Antwort auf die Frage