【发布时间】:2017-02-03 02:39:18
【问题描述】:
我有一个trait A,它有一个方法def fun1( b:B ):C
我想要A的子类实现B,类型更详细:
代码如下:
trait B
trait C
trait A {
def fun1( b:B ):C
}
class B1 extends B{
}
class B2 extends B{
}
class C1 extends C{
}
class C2 extends C{
}
我希望A的子类可以声明如下
class X1 extends A{
override def fun1(b:B1):C1 = ...
}
class X2 extends A{
override def fun1(b:B2):C2 = ...
}
但是,编译器会抱怨X1 overrides nothing。
我必须手动匹配详细的B 的类型,如下所示。
class X1 extends A{
override def fun1(b:B):C = b match {case x:B1 => ... }
}
class X2 extends A{
override def fun1(b:B2):C2 = b match {case x:B2 => ... }
}
此方法在编译期间无法检查正确的类型。我怎样才能实现第一个实现? 有什么设计模式可以解决这个问题吗?
【问题讨论】:
标签: scala design-patterns overriding