2011-08-05 28 views
6

tôi cố gắng sử dụng Danh sách thay vì Danh sáchJava Collection <Object> hoặc Bộ sưu tập <?>

List<?> list = new ArrayList<Integer>(); 
... 
list.add(1); //compile error 

gì tôi làm sai và làm thế nào đúc giá trị mới cho Integer? Có lẽ tôi sẽ sử dụng Danh sách trong dự án của mình?

+0

Có lý do nào bạn không thể kê khai danh sách dưới dạng Danh sách ? –

+0

Thử danh sách Danh sách = new ArrayList (); – nidhin

+0

@nidhin - ý tưởng tồi để sử dụng các loại thô –

Trả lời

10

List<?> có nghĩa là danh sách một số loại, nhưng chúng tôi không biết loại. Bạn chỉ có thể đặt các đối tượng đúng loại vào danh sách - nhưng vì bạn không biết loại, bạn có hiệu lực không thể đặt bất kỳ thứ gì trong danh sách (trừ null).

Không có cách nào xung quanh điều này, ngoài việc khai báo biến của bạn là List<Integer>.

+0

Vì vậy, có bao giờ có thời gian để sử dụng 'Generic '? Nó sẽ được cho các hoạt động trên lớp chung mà không liên quan đến loại đối tượng nó chứa? (Và tại sao các hoạt động như vậy lại hữu ích trong sự cô lập?) –

+1

Có. Ví dụ, 'Class ' có khá nhiều phương thức không sử dụng bất kỳ tham số kiểu nào. Đối với 'List ' (giống với 'List ', bạn có thể nhận được kích thước, so sánh nó với các danh sách khác (hoặc không phải danh sách), và lấy 'Object' ra khỏi nó. loại cụ thể. –

1
List<Integer> list = new ArrayList<Integer>(); 
... 
list.add(1); 
4
List<Integer> list = new ArrayList<Integer>(); 

Kiểu generic luôn phải là giống nhau.

1
List<?> list = new ArrayList<Integer>(); 

? có nghĩa là một số loại, bạn phải chỉ định Kiểu là Số nguyên. do đó, cú pháp chính xác sẽ là:

List<Integer> list = new ArrayList<Integer>(); 
Các vấn đề liên quan