I did a quick google on implementing clone() in Java and found: http://www.javapractices.com/topic/TopicAction.do?Id=71
It has the following comment:
copy constructors and static factory methods provide an alternative to clone, and are much easier to implement.
All I want to do is make a deep copy. Implementing clone() seems to make a lot of sense, but this highly google ranked article makes me a bit afraid.
Here are the issues that I've noticed:
Copy constructors don't work with Generics.
Here's some pseudo-code that won't compile.
public class MyClass<T>{
   ..
   public void copyData(T data){
       T copy=new T(data);//This isn't going to work.    
   }
   ..
}
Sample 1: Using a copy constructor in a generic class.
Factory methods don't have standard names.
It's quite nice to have an interface for reusable code.
public class MyClass<T>{
    ..
    public void copyData(T data){
        T copy=data.clone();//Throws an exception if the input was not cloneable
    }
    ..
}
Sample 2: Using clone() in a generic class.
I noticed that clone is not a static method, but wouldn't it still be necessary to make deep copies of all the protected fields? When implementing clone(), the extra effort to throw exceptions in non-cloneable subclasses seems trivial to me.
Am I missing something? Any insights would be appreciated.