【发布时间】:2015-07-28 20:39:44
【问题描述】:
假设我有一个案例类
case class Foo[T<:Bar[T]](t:T)
我有一个
case class FooWrapper[T<:Bar[T]](foos:Seq[Foo[T]])
到目前为止,一切都很好。
不幸的是,我现在想在无法访问用于构造它们的 T 的环境中合并两个 FooWrapprs。 IE。尝试这样的事情:
def merge(fw1:FooWrapper,fw2:FooWrapper) = {
FooWrapper(fw1.foos ++ fw2.foos)
}
显然,用于构造 fw1,fw2 的 T 可能不同,这就是合并失败的原因。
也许我太累了,看不到明显的东西,但是克服这个限制的正确方法是什么?让包装类本身实现一个合并方法是否可行,或者我可以由于类型擦除而忘记它吗?
编辑
我想要一个这样的合并方法:
case class FooWrapper[T<:Bar[T]](foos:Seq[Foo[T]]){
def merge(other:FooWrapper[T]) = FooWrapper[T](this.foos ++ other.foos)
}
然后
def doSomethingWith(w1:FooWrapper,w2:FooWrapper) ={
w1.merge(w2)
}
这编译得很好并且可能会工作,但我不确定我是否可以依赖它正常工作。
【问题讨论】:
标签: scala generics wrapper type-erasure