我们说我有一个案例类
case class Foo[T<:Bar[T]](t:T)
我有一个
case class FooWrapper[T<:Bar[T]](foos:Seq[Foo[T]])
到目前为止,非常好。
不幸的是,我现在想在一个我无法访问用于构造它们的T的环境中合并两个FooWrapprs。即尝试这样的事情:
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)
}
这编译很好,可能会有效,但我不确定我是否可以依赖它的正常工作。
答案 0 :(得分:1)
您可以强制执行fw1和fw2类型的等效:
merge
否则,请指定您期望{{1}}方法的结果类型?