【发布时间】:2014-01-13 20:37:01
【问题描述】:
我有一个使用如下结构类型定义的接口:
trait Foo {
def collection: {
def apply(a: Int) : String
def values() : collection.Iterable[String]
}
}
}
我想让这个接口的实现者之一使用标准的可变 HashMap:
class Bar {
val collection: HashMap[Int, String] = HashMap[Int, String]()
}
它可以编译,但在运行时我通过 Foo 类型变量引用 Bar 实例时得到 NoSuchMethod 异常。通过反射转储对象的方法,我看到 HashMap 的 apply 方法由于类型擦除而需要一个 Object,并且有一些疯狂重命名的生成的 apply 方法确实需要一个 int。有没有办法让泛型与结构类型一起工作?请注意,在这种特殊情况下,我能够使用实际特征而不是结构类型来解决我的问题,并且总体上更清晰。
【问题讨论】:
-
您能否添加一个示例来说明您如何使用它并获得异常?
标签: scala type-erasure