2011-03-31 99 views
1

我與斯卡拉型系統的以下問題,我目前不知道如何解決這個問題。斯卡拉:類型不匹配的問題與任何類型和模板類

基本上沒有後續情況:

我有一個類,讓我們把它叫做演員。這門課是模板化的。

class Actor[T](){ 
    def setValue(value: T): Int = { 
     //do something with value 
    } 
} 

另一類具有迭代以下類型的HashMap中的方法:

var newValues = new HashMap[String, Any]() 

此HashMap將包含Int類型和字符串的值。 HashMap的Key標識一個具體的Actor類,並確保該值的類型符合它引用的模板化的Actor類。

其他類迭代此HashMap的方法:

newValues.foreach(
    kv => { 
     db.getActor(kv._1).setValue(kv._2) //db.getActor returns an Actor identified by kv._1 
    } 
) 

由於混凝土值(kv._2)具有像模板類相同的數據類型的運行時期間收到,我想階引擎將能夠投出任何類型到它的具體亞型T.

但是我在編譯過程中出現以下錯誤:

found : kv._2.type (with underlying type Any) 
required: _$3 where type _$3 
    db.getActor(kv._1).setValue(kv._2) 

有誰知道解決這個問題?我認爲,通過使用超類型的任何有可能繞過一個開關殼體,並使用對象的任何的asInstanceOf [T]。

希望有人能幫幫我!這裏

+0

你的意思是:你的類'Actor'是** **通用類,而不是一個「模板」級。請注意,像C++中的模板與Scala等語言中的泛型不同。 (泛型可能看起來像表面上的模板,但以完全不同的方式工作)。 – Jesper 2011-03-31 20:10:04

回答

2

的問題是:

因爲具體的值(kv._2)具有 相同的數據類型,如模板 類運行期間已收到,

說的是誰?

編譯器不能證明,在編譯時,這的確是真的。而且,基本上它不相信你。

您可以隨時使用asIntanceOf告訴你更好地瞭解編譯器 - 也被稱爲在你的腳瞄準槍。我不知道什麼類型的db.getActor返回!我半猜是存在的。