我有在斯卡拉克隆烦恼。 这是可能克隆任意类型T的对象? 事情是这样的:
import collection.immutable.Stack
object Tester extends App {
trait Grand[T <: Cloneable] {
val stack = Stack[T]()
val h: T
def snapshot() {
stack push h.clone().asInstanceOf[T]
}
}
}
但它抛出:
阶:类对象的方法克隆不能T中访问
访问受保护的方法克隆不允许的,因为前缀T型不符合特质在大测试对象在访问发生
错在那里?
有人建议我在这个问题上。 在这种情况下,最好的办法是使用结构类型:
trait Grand[T <: {def cloneObject: T}]
这样用户代码可能如下:
case class Person(name: String) {
def cloneObject = copy()
}
object Roll extends App with Grand[Person] {
...
}
克隆()从java.lang.Object继承不是来自java.lang.Cloneable。 可复制的,只是一个标记接口。
什么你可能想不工作,因为实现了Cloneable不会强制执行者与公众一个覆盖保护Object.clone()。
见http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone()和http://docs.oracle.com/javase/7/docs/api/java /lang/Cloneable.html
LN结论:不,它是不可能克隆任意类型T1的对象。 但是,您可以克隆类型T2的任何对象,其中T2是通过一种与克隆()的公共覆盖约束。 你的榜样失败,因为Object.clone()是受保护的,即只能从一个子类中调用。
文章来源: Scala method clone in class Object cannot be accessed in T Access to protected method clone not permitted because