所以在Java中我有一个包含HashMap的类,它使用该类作为指向同一类对象的键。
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);
}
}
然而,当我尝试在特征中在Scala中做同样的事情时,我发现自己得到了一个类型不匹配的错误,发现java.lang.Class [?0]需要Class [Component]。
trait ComponentContainer {
val componentMap: HashMap[Class[Component], Component] = HashMap.empty
def set (c: Component) {
val t = (c.getClass, c)
componentMap += t
}
}
这让我非常难过,任何帮助都会受到很大的赏识。
答案 0 :(得分:1)
您的代码无法编译的原因是T.getClass
方法的结果为Class[_]
而非Class[T]
。 VonC here解释了getClass的详细信息。
从您的源代码中我无法看到您是否关心类实例的类型参数,但是您的代码编译版本如下:
trait ComponentContainer {
val componentMap: HashMap[Class[_], Component] = HashMap.empty
def set (c: Component) {
val t = (c.getClass, c)
componentMap += t
}
}