Ken*_*len 7 methods overriding clone scala protected
我正在编写一个trait应该指定clone返回a 的方法CloneResult,如下所示:
trait TraitWithClone extends Cloneable {
def clone: CloneResult
}
Run Code Online (Sandbox Code Playgroud)
这里的目的是收紧对这个界面有用java.lang.Object的clone()东西的返回类型.但是,当我尝试编译它时,我得到:
错误:在特征View2中重写方法克隆类型为()CloneResult; 类型为()java.lang.Object的类Object中的方法clone具有较弱的访问权限; 它应该是公开的; (注意在型性状视图2()CloneResult是抽象的,并且由具体的方法克隆在类型的类对象因此重写该方法克隆()java.lang.Object中)
public当Scala没有关键字时,我如何要求实现?我知道我能做到:
trait TraitWithClone extends Cloneable {
override def clone = cloneImpl
protected def cloneImpl: CloneResult
}
Run Code Online (Sandbox Code Playgroud)
......但这似乎是一个黑客.有什么建议?
这是错误消息的重要部分:“因此被对象类中的具体方法克隆覆盖”。
您应该在您的特质中提供该方法的实现clone。这并不理想,但这是你必须做的,因为这clone是Object.
trait TraitWithClone extends Cloneable {
override def clone: CloneResult = throw new CloneNotSupportedException
}
Run Code Online (Sandbox Code Playgroud)
虽然,通常你只是直接在你的具体类中做这种事情:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |