So in Java I had a class that contained a HashMap that used the class as a key pointing to an object of the same class.
class ComponentContainer {
private HashMap<Class<? extends Component>, Component> componentMap
public ComponentContainer {
componentMap = new HashMap<Class<? extends Component>, Component>();
}
public void set (Component c) {
componentMap.put(c.getClass(), c);
}
}
However when I try to do the same thing in Scala within a trait I find 开发者_开发问答myself getting a type mismatch error that a java.lang.Class[?0] was found where Class[Component] was needed.
trait ComponentContainer {
val componentMap: HashMap[Class[Component], Component] = HashMap.empty
def set (c: Component) {
val t = (c.getClass, c)
componentMap += t
}
}
This has me absolutely stumped any help would be appreciated greatly.
The reason your code doesn't compile is that T.getClass
method has result Class[_]
and not Class[T]
. Details of getClass has been explained by VonC here.
From your source code I cannot see if you care about type parameter of Class instances but following version of your code compiles:
trait ComponentContainer {
val componentMap: HashMap[Class[_], Component] = HashMap.empty
def set (c: Component) {
val t = (c.getClass, c)
componentMap += t
}
}
精彩评论