2012-04-26 35 views

Trả lời

5

Đối với các loại như Danh sách hoặc ArrayList, không nên có bất kỳ trình biên dịch nào và bạn nên trả về Danh sách quảng bá Code to an interface.

Bạn sẽ thấy mình bị giới hạn làm như vậy có được từ gói Concurrency như CopyOnWriteArrayList và bạn đang sử dụng các phương pháp như addIfAbsent không được xác định trong giao diện Danh sách.

Vì vậy, nếu bạn quay lại ArrayList hoặc bất kỳ thực hiện cụ thể cho rằng vấn đề bạn có thể sử dụng API mà không được quy định tại hợp đồng (List giao diện), nhưng sau đó bạn bị hạn chế trong changeing từ thực hiện cụ thể để cái gì khác (ArrayList-LinkedList), vì tất cả mọi người sử dụng API của bạn sẽ phải thay đổi theo những thay đổi của bạn, quá nhiều để mong đợi tôi nghĩ.

4

Ngụ ý là bạn sẽ không thể gọi các phương thức của ArrayList không phải là phương thức của giao diện Danh sách cho các đối tượng được trả về.

Nhưng nếu đối tượng là một ArrayList bạn có thể thực hiện một dàn diễn viên.

2

Lý do duy nhất để trả lại lớp cụ thể có thể là nếu người gọi cần biết về việc triển khai cụ thể này hoặc có thể, các giao diện bổ sung về triển khai cụ thể. Ví dụ, trong Android, bạn thường phải sử dụng ArrayList vì khung công tác không biết cách sắp xếp đúng cách giao diện danh sách chung chung.

15

Tốt nhất là trả lại loại chung nhất phù hợp với giao diện của bạn.

Nếu có một số lý do tại sao ArrayList vốn đã thích hợp cho dữ liệu bạn đang quay trở lại thì bạn nên sử dụng điều đó. Điển hình Danh sách là tốt, nhưng bạn cũng có thể xem xét sử dụng Bộ sưu tập nếu các giá trị trả vốn dĩ không có thứ tự:

Diagram of Java collections hierarchy

+2

+1 cho bức tranh :) –

+1

Cảm ơn bạn đã sơ đồ –

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