Tôi có mã lấy biểu đồ hai chân làm đầu vào và trả về bản đồ có khóa "1" có giá trị là danh sách "nút trong set1" và khóa "2" có giá trị là danh sách "nút trong set2" . Bây giờ, bản đồ có thể thay đổi. Về lý thuyết tôi nên sử dụng một bản sao phòng thủ để trả lại một bản đồ. Nhưng, trong trường hợp này là nó thực sự cần thiết? Nó xuất hiện một overkill.Nên sao chép bản sao phòng thủ?
ví dụ:
class BiPartite {
Graph graph;
Map bipartite
Bipartite(graph) {
this.graph = graph;
}
void calcBipartite() {
// calculate map
}
Map getMap() {
// should i make defensive copy ? Appears overkill.
}
}
Nếu giá trị bạn đang quay trở lại là một thông tin có nguồn gốc được tính toán khi đang bay, không cần phải tạo bản sao phòng thủ. Bạn có tính toán giá trị trả về của getMap mỗi khi phương thức được gọi không? – HariKrishnan
Được cảnh báo rằng người gọi đã có quyền truy cập bên ngoài vào các giá trị bên trong của đối tượng này vì bạn không sao chép 'đồ thị', giả sử' Đồ thị' có thể thay đổi. – jpmc26