Tôi có phương thức List<Foo> getFoos()
lấy dữ liệu từ máy chủ từ xa và trả về.Có chấp nhận trả lại unmodifiableList hoặc tôi có nên trả về mảng không?
Tất nhiên, người dùng không được thay đổi số mục trong danh sách vì anh ta sẽ nhận dữ liệu không được đồng bộ hóa với dữ liệu trên máy chủ (và nếu muốn thay đổi số mục anh ta có các phương pháp đặc biệt như addFoo()
).
Cách tiếp cận đầu tiên là trả về mảng và thay đổi chữ ký của phương thức thành Foo[] getFoos()
. Nhưng nó phổ biến hơn trong java và thuận tiện hơn cho người dùng để hoạt động với các bộ sưu tập vì vậy tôi đã thay đổi chữ ký thành List<Foo> getFoos()
. Phương pháp này luôn trả về
Collections.unmodifiableList (originalList)
Vì vậy, khi người dùng cố gắng để thay đổi danh sách, ông sẽ nhận được RuntimeException.
Có đề xuất nào về thiết kế api trong các trường hợp tương tự không?
Tôi quan tâm hơn cho dù điều này làm người dùng nhầm lẫn và khiến họ nghĩ rằng họ có thể sửa đổi danh sách và tất cả nội dung đồng bộ hóa sẽ được thực hiện tự động (đồng bộ với máy chủ tôi có ý nghĩa). – Roman
Tất nhiên, sau khi RuntimeException đầu tiên tất cả người dùng bối rối chắc chắn sẽ hiểu rằng họ không thể làm điều đó đơn giản như vậy :) – Roman
@Roman Trong tài liệu của bạn, bạn chỉ cần có một danh sách không thể sửa đổi được trả về. – Poindexter