Scala method clone in class Object cannot be accessed in T Access to protected method clone not permitted because

前端 未结 2 1549
有刺的猬
有刺的猬 2021-01-21 21:22

I\'ve got troubles with cloning in Scala. Is this possible to clone an object of an arbitrary type T? Something like this:

import collection.immutable.Stack

obj         


        
相关标签:
2条回答
  • 2021-01-21 22:21

    I was advised on this question. In such a situation the best approach is to use structural typing:

    trait Grand[T <: {def cloneObject: T}]
    

    so that the user code might be the following:

    case class Person(name: String) {
      def cloneObject = copy()
    }
    
    object Roll extends App with Grand[Person] {
    ...
    }
    
    0 讨论(0)
  • 2021-01-21 22:28

    clone() is from java.lang.Object not from java.lang.Cloneable. Cloneable is just a tagging-interface.

    What you are trying probably does not work because implementing Cloneable does not force the implementor to override the protected Object.clone() with a public one.

    see http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone() and http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html

    ln conclusion: No it is not possible to clone an object of an arbitrary type T1. You could however clone any object of type T2 where T2 is bound by a type with a public override of clone(). Your example fails because Object.clone() is protected, i.e. can only be called from within a subclass.

    0 讨论(0)
提交回复
热议问题