scala通用方法覆盖
发布时间:2020-12-16 09:22:13 所属栏目:安全 来源:网络整理
导读:我有一个抽象类: abstract class Foo(...){ def bar1(f : Foo) : Boolean def bar2(f : Foo) : Foo} 多个类扩展Foo并覆盖方法 class FooImpl(...) extends Foo{ override def bar1(f : Foo) : Boolean { ... } override def bar2(f : Foo) : Foo { ... }}
我有一个抽象类:
abstract class Foo(...){ def bar1(f : Foo) : Boolean def bar2(f : Foo) : Foo } 多个类扩展Foo并覆盖方法 class FooImpl(...) extends Foo{ override def bar1(f : Foo) : Boolean { ... } override def bar2(f : Foo) : Foo { ... } } 是否可能使用泛型(或某事)来使覆盖方法具有执行子类的参数类型?喜欢这个 : class FooImpl(...) extends Foo{ override def bar1(f : FooImpl) : Boolean { ... } override def bar2(f : FooImpl) : FooImpl { ... } } 我正在想一些沿着以下方向的东西,但是似乎没有起作用 abstract class Foo(...){ def bar1[T <: Foo](f : T) : Boolean def bar2[T <: Foo](f : T) : T } class FooImpl(...) extends Foo{ override def bar1[FooImpl](f : FooImpl) : Boolean { ... } override def bar2[FooImpl](f : FooImpl) : FooImpl{ ... } } 任何帮助深表感谢! 谢谢. 解决方法abstract class Foo{ type T <: Foo def bar1(f:T):Boolean def bar2(f:T):T } class FooImpl extends Foo{ type T = FooImpl override def bar1(f:FooImpl) = true override def bar2(f:FooImpl) = f } 在这个版本中,Foo的不同子类都将Foo作为一个超类共享,但是在你知道对象的一个??设置中,保留bar2的返回值(或bar1或bar2的参数)这是一个Foo,你需要使用类型obj.T作为变量的类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |