Giả sử tôi đang viết một phương thức sẽ trả về một Bản đồ . Ví dụ:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Sau khi suy nghĩ về nó một lúc, tôi quyết định rằng không có lý do gì để sửa đổi Bản đồ này sau khi nó được tạo. Vì vậy, tôi muốn quay trở lại một ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Tôi nên để kiểu trả về là một Bản đồ chung hay tôi nên chỉ định rằng tôi đang trả về một Bản đồ Immutable?
Từ một phía, đây chính là lý do tại sao các giao diện được tạo ra cho; để ẩn các chi tiết triển khai.
Mặt khác, nếu tôi để nó như thế này, các nhà phát triển khác có thể bỏ lỡ thực tế rằng đối tượng này là bất biến. Vì vậy, tôi sẽ không đạt được mục tiêu chính là các đối tượng bất biến; để làm cho mã rõ ràng hơn bằng cách giảm thiểu số lượng đối tượng có thể thay đổi. Thậm chí tệ nhất, sau một thời gian, ai đó có thể cố gắng thay đổi đối tượng này và điều này sẽ dẫn đến lỗi thời gian chạy (Trình biên dịch sẽ không cảnh báo về điều đó).