微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 在Scala中使用trait覆盖隐式setter方法

我正在尝试在Scala中实现可堆叠的特征模式(类似于http://www.artima.com/scalazine/articles/stackable_trait_pattern.html).这是我的尝试.我开始定义一个简单的类:

class Topping(var name:String)

该类声明应自动为名为“name”的变量创建getter和setter方法.那么我创建一个扩展这个类的特征:

trait LoggingNameTrait extends Topping {

  override def name_=(aName:String) {
    print(aName)
    super.name_=(aName) // this line doesn't compile
  }

}

如果上面的代码有效,它应该覆盖“name”字段的隐式setter,在控制台上打印它,然后调用使用该trait的类的setter.我得到一个“超级可能不会用于变量名称”.

你知道为什么Scala编译器不允许我覆盖隐式setter吗?

解决方法:

这是一个实现限制:超级仅适用于defs.

https://issues.scala-lang.org/browse/SI-1938

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐