2011-04-30 60 views
2

的类,所以在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],发现其中类[成分]需要。

trait ComponentContainer { 
    val componentMap: HashMap[Class[Component], Component] = HashMap.empty 

    def set (c: Component) { 
    val t = (c.getClass, c) 
    componentMap += t 
    }  
} 

这让我绝对难住,任何帮助将不胜感激。

回答

1

您的代码无法编译的原因是T.getClass方法的结果为Class[_]而不是Class[T]。的getClass的详细信息已被VonC here解释。

从你的源代码,我不能看到,如果你在乎类实例的类型参数,但下面的代码的版本编译:

trait ComponentContainer { 
    val componentMap: HashMap[Class[_], Component] = HashMap.empty 

    def set (c: Component) { 
    val t = (c.getClass, c) 
    componentMap += t 
    } 
} 
+0

这是完美的,谢谢你。我不认为我有什么理由担心部件的类型参数。这一切似乎都那么明显,一旦有人指出它给你。干杯! – 2011-05-01 00:22:25