2012-12-20 41 views
13

thể trùng lặp:
Why does ArrayList have “implements List”?thực hiện dự phòng của giao diện List trong ArrayList.java

Tôi mới vào java Tôi đã cố gắng để xem hệ thống các giao diện thu thập. Tôi thấy rằng chữ ký của AbstractList.java là như

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 

Nó thực hiện giao diện danh sách. Nhưng nếu bạn nhìn vào chữ ký của lớp trẻ ArrayList.java nó trông giống như

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable 

Nếu bạn nhìn tầng lớp phụ huynh đã được triển khai giao diện Danh sách thì tại sao lớp trẻ một lần nữa thực hiện chuyển đổi giao diện (Danh sách).

Có lý do cụ thể hoặc yêu cầu sau này

Trả lời

8

Có lý do cụ thể hoặc yêu cầu sau này

Tôi không nghĩ như vậy. Loại bỏ List<E> thứ hai sẽ thay đổi hoàn toàn không có gì xa như trình biên dịch có liên quan.

hai giả thuyết của tôi là:

  1. Đó là có vì lý do lịch sử. Tuy nhiên, tôi không thể tìm thấy bất kỳ bằng chứng nào để hỗ trợ điều này.
  2. Nó được bao gồm cho mục đích tài liệu, để làm cho nó ngay lập tức rõ ràng hơn ArrayList<E>is-aList<E> (điều này có lẽ là điều quan trọng nhất cần biết về ArrayList).
+1

Tôi cũng đã cố gắng để tìm ra câu trả lời với các giáo viên và đồng nghiệp của tôi và đi đến kết luận rằng tài liệu và giảm một nhấp chuột thêm là lý do chính đằng sau thực hiện dự phòng của giao diện danh sách. –

0

Có lẽ chỉ vì mục đích tài liệu, để làm cho nó rõ ràng cho người người muốn sử dụng ArrayList.

Nó thực sự là thừa, vì lớp học AbstractList của ArrayList đã triển khai giao diện Danh sách.

từ Java Ranch

Một lý do khác có thể là:

// This class captures common code shared by both the ArrayList and LinkedList. 
// An abstract class is a good way to provide a partially implemented class, or 
// a partial implementation of an interface. Notice that the header of this 
// class claims to implement the List interface, but the file doesn't write 
// all of the methods. 
// 
// Java allows this file to compile because it knows that the abstract class 
// must be extended to complete it. If a subclass of AbstractList doesn't 
// implement all the rest of the List interface's methods, that subclass will 
// not compile. 

tôi thấy nó here.

3

Tôi không biết câu trả lời là gì, vì vậy tôi đã làm một ít nghiên cứu. Hóa ra, nó cho rõ ràng.

Có. Nó có thể đã bị bỏ qua. Nhưng do đó nó ngay lập tức có thể nhìn thấy rằng nó là một Danh sách. Nếu không, nhấp chuột bổ sung thông qua tài liệu mã/ sẽ được yêu cầu.Tôi nghĩ đó là lý do - sự rõ ràng.

Và để thêm nội dung mà Joeri Hendrickx đã nhận xét - đó là mục đích của cho thấy rằng ArrayList triển khai Danh sách. AbstractList trong toàn bộ hình ảnh chỉ để thuận tiện và để giảm trùng lặp mã giữa Triển khai danh sách.

Why does ArrayList have "implements List"?

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