加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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可能是感兴趣的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读