Scala覆盖方法,子类为参数类型
发布时间:2020-12-16 18:06:38 所属栏目:安全 来源:网络整理
导读:我有一个特征A有一个方法def fun1(b:B):C 我希望A的子类实现B具有更详细的类型: 这是代码: trait Btrait Ctrait A { def fun1( b:B ):C}class B1 extends B{}class B2 extends B{}class C1 extends C{}class C2 extends C{} 我希望A的子类可以声明如下 c
我有一个特征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不会覆盖任何内容. 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 = ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |