【发布时间】:2016-01-19 12:15:09
【问题描述】:
我需要在已为 SuperClass 声明的 HashMap 中使用子类。
例如:我创建了一个超类和一个子类。
现在我创建一个抽象类 A 和一个扩展 A 的具体类 B。
A 有一个变量 myMap ,声明为 java.util.Map[_ <: Superclass, String] 。在 B 类中,我需要使用 myMap ,但我需要在 myMap 中插入 SubClass 的实例而不是 Superclass。以下是解释的代码
abstract class Superclass {
def foo(value:String): Boolean
}
class Subclass extends Superclass {
def foo(value:String) = {
true // or random boolean expression
}
}
abstract class A {
var myMap: java.util.Map[_ <: Superclass, String]
def addToMap(value:String)
}
class B extends A {
myMap = new java.util.HashMap[Subclass, String]()
def addToMap(value:String) {
val subclass = new SubClass()
myMap.put(subclass, value) // getting compilation error here
}
}
如果我尝试在 myMap 中插入子类实例,我会收到以下错误: 类型不匹配;找到:需要 Subclass.type(具有底层类型 Subclass):_$2 其中 type _$2 <: superclass>
【问题讨论】: