2011-03-31 114 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返回!我半猜是存在的。