Tôi đã tìm kiếm nhanh trên google về cách triển khai clone () trong Java và tìm thấy: http://www.javapractices.com/topic/TopicAction.do?Id=71
Nó có nhận xét sau:
copy constructor và các phương thức static factory cung cấp một giải pháp thay thế cho clone và dễ thực hiện hơn nhiều.
Tất cả những gì tôi muốn làm là tạo một bản sao sâu. Việc thực hiện clone () có vẻ rất có ý nghĩa, nhưng bài viết được google xếp hạng cao này khiến tôi hơi e ngại.
Đây là những vấn đề mà tôi nhận thấy:
Các hàm tạo sao chép không hoạt động với Generics.
Đây là một số mã giả sẽ không biên dịch.
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
Mẫu 1: Sử dụng một hàm tạo sao chép trong một lớp chung.
Các phương thức gốc không có tên chuẩn.
Nó khá đẹp khi có một giao diện cho mã có thể sử dụng lại.
public class MyClass<T>{
..
public void copyData(T data){
T copy=data.clone();//Throws an exception if the input was not cloneable
}
..
}
Mẫu 2: Sử dụng clone () trong một lớp chung.
Tôi nhận thấy rằng bản sao không phải là một phương thức tĩnh, nhưng vẫn không cần thiết phải tạo bản sao sâu của tất cả các trường được bảo vệ? Khi thực hiện clone (), nỗ lực bổ sung để ném các ngoại lệ trong các lớp con không thể sao chép có vẻ nhỏ đối với tôi.
Tui bỏ lỡ điều gì vậy? Mọi thông tin chi tiết sẽ được đánh giá cao.