Scala:类型不匹配问题,类型为Any和模板化类

时间:2011-03-31 12:26:24

标签: templates scala

我对scala类型系统有以下问题,我目前不知道如何解决这个问题。

基本上有以下情况:

我有一个班级,我们称之为演员。这个课是模板化的。

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

另一个类有一个迭代以下类型的HashMap的方法:

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

此HashMap将包含Int和String类型的值。 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)具有与模板化类在运行时期间收到的数据类型相同的数据类型,我认为scala引擎能够将any类型转换为其具体的子类型T.

但是我在编译期间遇到以下错误:

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

有人知道解决这个问题吗?我认为通过使用超类型Any可以绕过switch-case并使用对象Any的asInstanceOf [T]。

希望有人可以帮助我!

1 个答案:

答案 0 :(得分:2)

这里的问题是:

  

因为具体值(kv._2)具有   与模板化数据类型相同的数据类型   class已在运行时收到,

说谁?

编译器无法在编译时证明这确实是真的。而且,基本上,它不信任你。

你可以随时使用asIntanceOf告诉编译器你知道的更好 - 也就是说瞄准你的脚。我想知道db.getActor返回什么类型!我猜不到存在主义。