gpt4 book ai didi

以子类为参数类型的Scala覆盖方法

转载 作者:行者123 更新时间:2023-12-04 23:39:36 26 4
gpt4 key购买 nike

我有一个 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 => ... }
}

此方法在编译期间无法检查正确的类型。我怎样才能实现第一个实现?
有没有设计模式来处理这个问题?

类似的问题是 C# Override method with subclass parameter

最佳答案

您可以使用泛型类型参数执行此操作。

trait A[T <: B] {
def fun1( t:T ):C
}

class X1 extends A[B1]{
override def fun1(b:B1):C1 = ...
}

关于以子类为参数类型的Scala覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com