2012-07-09 52 views
23

thể trùng lặp:
What does List<?> mean in java generics?
What does the question mark in Java generics' type parameter mean?Generics <?> thực sự có nghĩa là gì?

Xin lỗi nhưng nó đã được khó khăn cố gắng để tìm kiếm <?>.

Điều gì có ý nghĩa liên quan đến Generics Java? Tôi hiểu <A extends B><A super B>, nhưng trước đây tôi chưa bao giờ thấy dấu chấm hỏi này.

+0

Thử tìm kiếm bằng "Hound symbol" - http: //www.symbolhound.com/ –

+0

không có '' – newacct

Trả lời

35

<?> là viết tắt của <? extends Object>, còn được gọi là ký tự đại diện không bị chặn. Vì vậy, bạn có thể chỉ định bất kỳ loại đối tượng trong chung của bạn.

Ví dụ: lớp List được khai báo là List<?>, vì đây có thể là danh sách mọi thứ bạn muốn.


Resources:

+0

nếu có gì? thì tại sao bạn đang sử dụng chung? Tôi không nghĩ vậy, đó là câu trả lời hay để tạo nên sự khác biệt. Vì '' cũng sẽ cho phép bạn chỉ định bất kỳ kiểu đối tượng nào. – UnKnown

8

của một loại wildcard. Nó viết tắt cho ? extends Object

Nếu bạn nhận được nó, tất cả những gì bạn biết là số Object. Nếu bạn cố gắng thiết lập, bạn không thể bởi vì nó có thể là bất kỳ lớp con của Object.

+5

Sự khác nhau giữa 'Lớp ' và 'Lớp' là gì? Tại sao tôi lại cần sử dụng 'Class ' thay vì 'Lớp'? – ycomp

+1

@ycomp loại thô đã tắt chung. Ví dụ. Bản đồ bản đồ; map.entrySet() là một tập hợp đơn giản, không phải là 'Set ' trong khi sử dụng 'Bản đồ ' và bạn nhập Số là một 'Set >' –

+0

Tại sao không chỉ sử dụng Object trong trường hợp đó? Lợi thế của việc sử dụng Generics là gì? – Davor

3

Ký tự đại diện của nó. Giả sử bạn có một bộ sưu tập nhưng loại bộ sưu tập đó không được biết, do đó bạn biểu thị nó bằng "?". Nó chỉ đơn giản xác định rằng loại không được biết. Để biết thêm chi tiết, hãy tham khảo http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Tôi chắc chắn nó sẽ giúp ích.

3

Ký tự đại diện chung chung là "cái gì đó". Nó sẽ được xử lý như một cái gì đó kéo dài từ Object.

Từ Java documentation: (?)

Trong mã chung, dấu hỏi, được gọi là ký tự đại diện, đại diện cho một loại chưa biết. Ký tự đại diện có thể được sử dụng trong một loạt các trường hợp : dưới dạng loại tham số, trường hoặc biến cục bộ; đôi khi là kiểu trả về (mặc dù thực hành lập trình tốt hơn là để cụ thể hơn). Ký tự đại diện không bao giờ được sử dụng làm đối số loại cho lời gọi phương thức chung, tạo một cá thể lớp chung hoặc siêu kiểu.

Ví dụ: List<?> là danh sách chứa các đối tượng từ loại không xác định.

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