2011-07-25 43 views
95

Cố gắng sử dụng đoạn mã sau:"Khởi tạo" một Danh sách bằng Java?

List<Integer> list = new List<Integer>(); 

tôi nhận được thông báo lỗi sau:

java.util.List là trừu tượng; không thể được khởi tạo

Điều này có nghĩa là gì và tại sao tôi không thể khởi tạo số List giống như cách tôi làm ArrayList?

Trả lời

20

Sử dụng List<Integer> list = new ArrayList<Integer>();

+2

Đây là cách để thực hiện. – Doug

+2

+1 để có ngón tay kích hoạt nhanh nhất :-) – Kal

136

Trong Java, List là một giao diện . Tức là, nó không thể được khởi tạo trực tiếp.

Thay vào đó bạn có thể sử dụng ArrayList là triển khai giao diện đó sử dụng mảng làm cửa hàng sao lưu của nó (do đó tên).

Kể từ ArrayList một loại List, bạn có thể dễ dàng upCast nó:

List<T> mylist = new ArrayList<T>(); 

Điều này trái ngược với .NET, ở đâu, kể từ phiên bản 2.0, List<T> là việc thực hiện mặc định của giao diện IList<T> .

26

List là một giao diện chứ không phải lớp bê tông.
Giao diện chỉ là một tập hợp các hàm mà một lớp có thể triển khai; nó không tạo ra bất kỳ ý nghĩa nào để khởi tạo một giao diện.

ArrayList là lớp bê tông xảy ra để triển khai giao diện này và tất cả các phương pháp trong đó.

3

A List không phải là điều thực sự trong Java. Đó là một giao diện, một cách xác định cách một đối tượng được phép tương tác với các đối tượng khác. Như vậy, nó không bao giờ có thể được instantiated. An ArrayList là việc triển khai giao diện List, cũng như danh sách được liên kết, v.v. Sử dụng những thay thế.

3

A List trong java là một giao diện xác định chất lượng nhất định mà "danh sách" phải có. Triển khai danh sách cụ thể, chẳng hạn như ArrayList triển khai giao diện này và xác định cách thức các phương thức khác nhau hoạt động. Bạn đang cố gắng làm gì với danh sách này? Nhiều khả năng, một trong các danh sách được tích hợp sẵn sẽ hoạt động cho bạn.

9

List là giao diện chứ không phải lớp để không thể khởi tạo. ArrayList rất có thể những gì bạn đang sau:

ArrayList<Integer> list = new ArrayList<Integer>();

Một giao diện trong Java cơ bản định nghĩa một kế hoạch chi tiết cho các lớp - một lớp học thực hiện một giao diện phải cung cấp triển khai các phương pháp danh sách định nghĩa. Nhưng việc thực hiện thực tế là hoàn toàn lên đến lớp thực hiện, ArrayList trong trường hợp này.

JDK cũng cung cấp LinkedList - một triển khai thay thế lại phù hợp với giao diện danh sách.Nó hoạt động rất khác với ArrayList bên dưới và như vậy nó có xu hướng hiệu quả hơn khi thêm/xóa các mục một nửa thông qua danh sách, nhưng đối với đại đa số trường hợp sử dụng nó kém hiệu quả hơn. Và tất nhiên nếu bạn muốn xác định thực hiện của riêng bạn, nó hoàn toàn có thể!

Tóm lại, bạn không thể tạo danh sách vì nó là giao diện không chứa mã cụ thể - đó là công việc của các lớp thực hiện danh sách đó, trong đó ArrayList được sử dụng nhiều nhất (và có lý do chính xác!)

Điều đáng lưu ý là trong C# a List là một lớp, không phải là giao diện - đó là IList. Nguyên tắc tương tự cũng được áp dụng, chỉ với các tên khác nhau.

+0

Tôi nghĩ bạn muốn viết 'ArrayList' mới vào đoạn mã của bạn :) –

+0

Tôi thực sự cảm ơn vì đã chỉnh sửa! – berry120

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