2009-05-11 5 views
0

Ich versuche, so etwas zu tun:Wie erstelle ich eine Karte mit einem Typ-Parametern der Klasse

import scala.swing 

class componentMapper { 

    val map = Map[Class[_], Componenet]() 

    def apply(c: Class[_], component: Component) = map += (c -> componenet) 

} 

class Render extends ComponentMapper { 

    def getRenderer(value: AnyRef) = map(value.getClass) 

} 

Dies scheint nicht zu funktionieren. Welchen Typparameter sollte ich für die Klasse verwenden?

+0

Ich habe Scala nie benutzt, aber ich verstehe, dass es auf der JVM läuft ... ist nicht eine Schnittstelle und keine Klasse? Probieren Sie stattdessen HashMap aus. – Powerlord

+0

Scala hat eingebaute Karten. Die Map [...]() oben ist wie eine statische Factory-Methode. – Brian

Antwort

3

Ich bin mir nicht ganz sicher, was das Kernproblem ist, aber es ist nicht der Typ-Parameter für die Klasse. Es scheint ein seltsames Inferenzproblem mit "->" zu sein. Das folgende kompiliert und funktioniert gut.

Beachten Sie, dass ich viele kleine Korrekturen an Ihrem Code vornehmen musste, um selbst das Problem zu finden, über das Sie gesprochen haben.

Ich habe ein Ticket für den Fall in der Hoffnung, dass es etwas reparierbar ist: https://lampsvn.epfl.ch/trac/scala/ticket/1974.

+0

Ausgezeichnet, das funktioniert. Vielen Dank. – Brian