2011-04-30 101 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