在scala中以自定义的特征调用超类的方法
发布时间:2020-12-16 09:35:03 所属栏目:安全 来源:网络整理
导读:我试图创建一个特征,当混合在一起时,将使用调用原始方法的方法替换方法的默认定义,然后操作结果。 这是我要做的: class Foo { def bar() : String = "Foos bar"}trait OtherStuff { self : Foo = def bar() : String = self.bar() + " with OtherStuff"}
我试图创建一个特征,当混合在一起时,将使用调用原始方法的方法替换方法的默认定义,然后操作结果。
这是我要做的: class Foo { def bar() : String = "Foos bar" } trait OtherStuff { self : Foo => def bar() : String = self.bar() + " with OtherStuff" } class Quux extends Foo with OtherStuff 如果这样我想要它的方式,那么(新的Quux).bar将现在返回Foos吧与OtherStuff。不幸的是,这样做不行 – 我得到的是: <console>:6: error: error overriding method bar in class Foo of type ()String; method bar in trait OtherStuff of type ()String needs `override' modifier class Quux extends Foo with OtherStuff 但是如果在定义OtherStuff时使用override,我得到: <console>:7: error: method bar overrides nothing override def bar() : String = self.bar() + " with OtherStuff" 是否可以使用trait覆盖自我类型中的方法?如果没有,会改变OtherStuff是一个特征,扩展Foo而不是一个具有自己的类型的Foo对所有代码存在的东西都不利 class WhatEver extends Foo with Xyz with Pqr with OtherStuff with Abc 我正在scala 2.7.7工作,因为这是一个sbt构建规则,我们还没有将我们的sbt项目升级到0.10.x版本。 (我们依赖的插件还没有准备好) 解决方法
你需要抽象覆盖,没有自己的类型。
trait OtherStuff extends Foo { abstract override def bar() = super.bar() + " with OtherStuff" } 然后类Quux扩展Foo与OtherStuff做你想要的。 This article可能是感兴趣的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |