scala 泛型转换 A[T] => B[T]
scala generic conversion A[T] => B[T]
我正在尝试使用泛型来避免丢失实现的子类型。
虽然我相信它有一个名字,但我并不完全清楚如何搜索这个问题。
我有一个名为 conf 的特征和一些实现(其中 WB 是 Params 的一个实例):
trait Conf[P <: Params]
class ConfInstance extends Conf[WB]
现在我希望后端可以将此类型参数转换为不同的 class,如下所示:
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)
}
但编译器抱怨:"Expression of type AABBCC" 不符合预期类型 Coder[P]"
我尝试添加一个 asInstanceOf[Coder[P]],但我不喜欢这个解决方案。
那么进行这种转换的正确方法是什么?
似乎是 IDE 问题(是 IntelliJ IDEA 吗?)。
IDE 错误地报告编译错误,但代码编译通过。
.
我正在尝试使用泛型来避免丢失实现的子类型。 虽然我相信它有一个名字,但我并不完全清楚如何搜索这个问题。 我有一个名为 conf 的特征和一些实现(其中 WB 是 Params 的一个实例):
trait Conf[P <: Params]
class ConfInstance extends Conf[WB]
现在我希望后端可以将此类型参数转换为不同的 class,如下所示:
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)
}
但编译器抱怨:"Expression of type AABBCC" 不符合预期类型 Coder[P]"
我尝试添加一个 asInstanceOf[Coder[P]],但我不喜欢这个解决方案。
那么进行这种转换的正确方法是什么?
似乎是 IDE 问题(是 IntelliJ IDEA 吗?)。
IDE 错误地报告编译错误,但代码编译通过。
.