Scala:指定覆盖受保护方法的公共方法
我正在编写一个特性,应该指定返回CloneResult的方法clone,如下所示:
trait TraitWithClone extends Cloneable { def clone: CloneResult } 这里的目的是将java.lang.Object的clone()的返回类型收紧到对此接口有用的东西.但是,当我尝试编译它时,我得到:
当Scala没有关键字时,我如何要求实现公开?我知道我能做到: trait TraitWithClone extends Cloneable { override def clone = cloneImpl protected def cloneImpl: CloneResult } ……但这似乎是一个黑客.有什么建议? 解决方法
这是错误消息的重要部分:“因此被类Object中的具体方法克隆覆盖”.
您应该在特征中提供克隆方法的实现.它不是理想的,但它是你必须要做的,因为clone是Object上的具体方法. trait TraitWithClone extends Cloneable { override def clone: CloneResult = throw new CloneNotSupportedException } 虽然,通常你直接在你的具体类中做这种事情: class Foo extends Cloneable { override def clone: Foo = super.clone.asInstanceOf[Foo] } scala> new Foo res0: Foo = Foo@28cc5c6c scala> res2.clone res1: Foo = Foo@7ca9bd (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |