2008-08-27 17 views
5

Trong Java, giả sử bạn có một lớp kết thúc một ArrayList (hoặc bất kỳ bộ sưu tập nào) của các đối tượng.Bản sao trả về Java để ẩn các thay đổi trong tương lai

Làm cách nào bạn trả về một trong các đối tượng đó để người gọi sẽ không thấy bất kỳ thay đổi nào trong tương lai đối với đối tượng được tạo trong ArrayList?

tức là bạn muốn trả lại một bản sao sâu của đối tượng, nhưng bạn không biết nó có phải là nhân bản hay không.

Trả lời

4

Bật đó vào một spec:
đối tượng -đó cần phải thực hiện một giao diện để được phép vào bộ sưu tập Something như ArrayList<ICloneable>()

Sau đó, bạn có thể được đảm bảo rằng bạn luôn luôn làm một bản sao sâu - giao diện nên có một phương pháp được đảm bảo để trả về một bản sao sâu.

Tôi nghĩ đó là điều tốt nhất bạn có thể làm.

1

Tôi cho rằng đó là một câu trả lời ovbious:

Thực hiện một điều kiện tiên quyết cho các lớp được lưu trữ trong bộ sưu tập được cloneable. Bạn có thể kiểm tra tại thời điểm chèn hoặc tại thời gian truy xuất, bất kỳ điều gì có ý nghĩa hơn và ném một ngoại lệ.

Hoặc nếu mặt hàng không có khả năng cloneable, chỉ cần quay trở lại tùy chọn trả về theo tham chiếu.

Các vấn đề liên quan