Tôi đang cố gắng tạo bản sao sâu của một đối tượng, bao gồm một phiên bản GregorianCalendar
. Tôi luôn cảnh giác với việc sử dụng clone()
và dường như nó không bị ghi đè ở đây, vì vậy tôi chỉ đang thực hiện trường sao chép theo trường. Lý tưởng nhất, có muốn được một constructor sao chép, mà tôi có thể sử dụng như sau:Cách nhanh nhất để sao chép một GregorianCalendar?
GregorianCalendar newCalendar = new GregorianCalendar(oldCalendar);
Đáng tiếc là tôi không thể tìm thấy bất kỳ chức năng như vậy trong API và đang mắc kẹt cố gắng tìm ra các lĩnh vực mà tôi cần để có được một bản sao chính xác. Vì vậy, để tạo một bản sao của một trong các lịch này, bạn sẽ làm như thế nào? Tôi có thiếu một số phím tắt đơn giản ở đây không?
Tôi đã không hoàn toàn rõ ràng về lý do tại sao tôi tránh 'clone() '. Trong trường hợp này, tôi chỉ theo lời khuyên của Joshua Bloch về việc tạo bản sao phòng thủ. Kể từ khi clone() có thể hình dung được gọi là một lớp con clone() phương pháp tôi có thể kết thúc với một bản sao không sạch sẽ. Một chút học vấn trong trường hợp của tôi, nhưng đó là lý do tại sao tôi đã tránh nó. – wds
như tôi đã nói, dữ liệu trong Lịch không bị ảnh hưởng bởi vấn đề này - tất cả dữ liệu của nó là nguyên thủy. Và phương pháp nhân bản trong 'Calendar' hoạt động tốt. – Bozho
Quan điểm của ông là bạn có thể hình dung ra một lớp con giữ một tham chiếu đến thể hiện lịch ban đầu và giữ tham chiếu đó xung quanh. Nếu, nói rằng, tất cả người định cư sẽ đặt giá trị trong phiên bản gốc thay vì bản sao mới, bản sao "sâu" của bạn giờ đây sẽ bị xâm phạm. – wds