我的地图声明如下:
private var iCacheMap: HashMap[Class[_ <: ICacheable], String] = ....
因此,此iCacheMap的关键是实现ICacheable接口的类
然后我想查询这张地图,如下所示:
private def queryICacheMap(message: AnyRef) {
val iCacheable = message.asInstanceOf[ICacheable]
val myString = iCacheMap.get(classOf[iCacheable]).get
// ...do something with myString
}
但是,我得到一个类型不匹配异常,说明我们期望一个类[_&lt;:ICacheable],但实际是Class [Any]
我需要做什么才能正确投射?
答案 0 :(得分:6)
您可以安全地使用模式匹配:
message match {
case iCacheable: ICacheable => iCacheMap.get(iCacheable.getClass).getOrElse("Not Found in Map")
case _ => //manage the "else" case
}
当你有一个想要了解信息的静态类型时,classOf [T]很有用;如果您需要从实例中检索相同的信息,可以使用getClass。
答案 1 :(得分:0)
试试这个:
var iCacheMap: Map[Class[_ <: ICacheable], String] = Map()
//populate iCacheMap; message comes along
myString = message match {
case iCacheable: ICacheable => iCacheMap.getOrElse(iCacheable.getClass, "Nothing")
case _ => throw new IllegalArgumentException("Not good")
}