Tôi tự hỏi nếu có một cách được đề xuất để thực hiện bản sao / bản sao sâu trong java.
Tôi có 3 giải pháp trong đầu, nhưng tôi có thể bỏ lỡ một số, và tôi muốn có ý kiến của bạn
chỉnh sửa: bao gồm đề xuất Bohzo và câu hỏi tinh chỉnh: đó là về nhân bản sâu hơn là nhân bản nông.
Tự làm
mã bản sao bằng các thuộc tính tay sau các thuộc tính và kiểm tra xem các thể hiện có thể thay đổi cũng được nhân bản không.
pro:
- kiểm soát những gì sẽ được thực hiện
-
nhược điểm thực hiện nhanh :
- tẻ nhạt để viết và bảo trì
- dễ bị lỗi (sao chép / dán thất bại, thiếu tài sản, thuộc tính có thể thay đổi được gán lại)
Sử dụng sự phản chiếu:
Với các công cụ phản chiếu của riêng bạn hoặc với một người trợ giúp bên ngoài (như jakarta common-bean), thật dễ dàng để viết một phương thức sao chép chung sẽ thực hiện công việc trong một dòng.
pro:
- dễ viết
- không có
nhược điểm bảo trì :
- ít kiểm soát những gì xảy ra
- dễ bị lỗi với đối tượng có thể thay đổi nếu công cụ phản chiếu không sao chép các đối tượng phụ quá
- thực thi chậm hơn
Sử dụng khung nhân bản:
Sử dụng một khung làm việc đó cho bạn, như:
Commons-lang serializationUtils
Thư viện nhân bản sâu Java
Dozer
Kryo
pro:
- giống như sự phản chiếu
- kiểm soát nhiều hơn những gì sẽ được nhân bản chính xác.
Nhược điểm:
- mọi trường hợp có thể thay đổi được sao chép hoàn toàn, ngay cả ở cuối phân cấp
- có thể rất chậm để thực thi
Sử dụng công cụ mã byte để viết bản sao khi chạy
javassit , BCEL hoặc cglib có thể được sử dụng để tạo ra một bản sao chuyên dụng nhanh như một tay viết. Ai đó biết một lib sử dụng một trong những công cụ này cho mục đích này?
Những gì tôi đã bỏ lỡ ở đây?
Bạn muốn giới thiệu cái nào?
Cảm ơn.