我正在尝试使用泛型而不丢失实现的子类型。 尽管我相信它是一个名字,但我对如何搜索这个问题尚不完全清楚。 我有一个名为conf的特征和一些实现(WB是Params的一个实例):
trait Conf[P <: Params]
class ConfInstance extends Conf[WB]
现在我希望后端可以将这种类型的参数转换为这样的不同类:
trait Coder[P <: Params]
class AABBCC(conf: Conf[WB]) extends Coder[WB]
def backend[P <: Params](conf: Conf[P]): Coder[P] = {
conf match {
case abcConf: ConfInstance => new AABBCC(abcConf)
}
但是编译器抱怨:“ AABBCC类型的表达式”与预期的Coder [P]类型不符。
我尝试添加一个asInstanceOf [Coder [P]],但我不喜欢这种解决方案。
那么哪个是进行此转换的正确方法?