标量通用转换A [T] => B [T]

时间:2018-08-27 11:31:20

标签: scala generics type-bounds

我正在尝试使用泛型而不丢失实现的子类型。 尽管我相信它是一个名字,但我对如何搜索这个问题尚不完全清楚。 我有一个名为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]],但我不喜欢这种解决方案。

那么哪个是进行此转换的正确方法?

1 个答案:

答案 0 :(得分:4)

似乎是IDE问题(是IntelliJ IDEA吗?)。

IDE错误地报告了编译错误,但代码已编译。

enter image description here