wor*_*tor 5 overriding design-patterns scala
我有一个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{
}
Run Code Online (Sandbox Code Playgroud)
我希望 的A子类可以声明如下
class X1 extends A{
override def fun1(b:B1):C1 = ...
}
class X2 extends A{
override def fun1(b:B2):C2 = ...
}
Run Code Online (Sandbox Code Playgroud)
然而,编译器会抱怨X1 overrides nothing. 我必须手动匹配DetailedB的类型,如下所示。
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 => ... }
}
Run Code Online (Sandbox Code Playgroud)
该方法无法在编译时检查类型是否正确。我怎样才能实现第一次实施?有没有什么设计模式可以解决这个问题?
您可以使用泛型类型参数来完成此操作。
trait A[T <: B] {
def fun1( t:T ):C
}
class X1 extends A[B1]{
override def fun1(b:B1):C1 = ...
}
Run Code Online (Sandbox Code Playgroud)