object PDJcrCache {
val cache = new ConcurrentHashMap[String, _ <: PDEntity]()
def put[A <: PDEntity](elem: A) = {
cache.put(elem.asInstanceOf[PDEntity].getId, ***elem***)
}
def get[A <: PDEntity](id: String): A = {
cache.get(id).asInstanceOf[A]
}
def remove[A <: PDEntity](id: String) = {
cache.remove(id)
}
}
我收到编译错误
cache.put(elem.asInstanceOf[PDEntity].getId, ***elem***)
。
它说expected _$1, actual A
。对这个问题有什么看法吗?
这也是使用Scala泛型的正确方法吗?
答案 0 :(得分:2)
ConcurrentHashMap[String, _ <: PDEntity]
是一个地图,其值类型为&#34;某些未知的子类型为PDEntity
&#34;。因此,您无法将elem
放入此类地图中,因为A
可能与该地图使用的特定子类型的PDEntity
的子类型不同。
你可能想要一个ConcurrentHashMap[String, PDEntity]
,但说实话,你的大多数仿制品看起来都是不必要的 - 如果你只是想存储和检索PDEntity
,为什么不把它们保存在那里呢?如果您想要某个特定子类型PDEntity
的缓存,那么A
应该是类的类型参数,而不是单个方法。你想要实现的是什么?