Nhìn vào javadoc tôi thấy rằng một ArrayList có một add phương pháp quá tải:Tại sao List.add (E) trả về boolean trong khi List.Add (int, E) trả về void?
public boolean add (E e)
Gắn các yếu tố quy định đến hết danh sách này.
và
public void add (int index, yếu tố E)
Chèn các yếu tố quy định tại vị trí quy định trong danh sách này. Thay đổi phần tử hiện tại ở vị trí đó (nếu có) và bất kỳ phần tử tiếp theo nào ở bên phải (thêm một phần tử vào chỉ mục của chúng).
tôi nhận thấy rằng một trong những đầu tiên quay trở lại một boolean
trong khi cái thứ hai là một void
. Khi nó quay ra, các add
đầu tiên đã trở lại một boolean
vì:
Returns: đúng (theo quy định của Collection.add (E))
Vì vậy, tôi đã đi đến Collection.add(E):
thêm boolean (E e)
Đảm bảo rằng bộ sưu tập này chứa phần tử được chỉ định (hoạt động tùy chọn). Trả về true nếu bộ sưu tập này thay đổi do cuộc gọi. (Trả về false nếu bộ sưu tập này không cho phép các bản sao và đã chứa phần tử được chỉ định.)
Vì vậy, câu hỏi của tôi là, tại sao add
được chỉ định trả về boolean thay vì là khoảng trống? Khi tôi add
điều tôi mong đợi chỉ thực hiện một thao tác.
Tôi hiểu rằng có các cấu trúc dữ liệu khác, trái ngược với ArrayList, không cho phép các bản sao (chẳng hạn như tập hợp). Nhưng thậm chí sau đó, có thể không phải là vấn đề được giải quyết dọc theo dòng:
public void add(E e){
if(e is not in set){
add e;
}
}
Bằng cách đó nếu e
IS trong các thiết lập không có hành động được thực hiện. Tại sao nên trả lại một boolean
thay vì cách tiếp cận void
?
Tôi đoán là bởi vì đôi khi bạn có thể muốn biết nếu bạn không đặt thứ gì đó vào một bộ. Nếu 'void' được trả về thì không có cách nào biết được việc tìm kiếm phần tử đó sau đó. Không thể nghĩ ra bất kỳ ví dụ nào có liên quan ngoài đỉnh đầu của tôi ... – awksp
Mã của bạn sẽ không thực hiện công việc tương tự vì nó không cho người gọi biết nếu nó đã chứa đối tượng. Mã tương đương sẽ có một .contains trước .add –
Nếu bạn không quan tâm về việc liệu lệnh gọi 'add' có gây ra bất kỳ thay đổi nào, bạn không bắt buộc phải làm bất cứ điều gì với kết quả. Nhưng những người khác có thể tìm thấy thông tin hữu ích. – Alex