Từ this Oracle Java hướng dẫn:ký tự đại diện Chụp trong Java Generics
Ví dụ WildcardError tạo ra một lỗi chụp khi biên soạn:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
Sau khi trình diễn lỗi này, họ giải quyết vấn đề bằng cách sử dụng phương thức trợ giúp:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
Đầu tiên, thứ ey nói rằng các tham số danh sách đầu vào (i
) được xem như một Object
:
Trong ví dụ này, trình biên dịch xử lý các thông số đầu vào
i
như là kiểu Object.
Tại sao sau đó i.get(0)
không trả lại Object
? nếu nó đã được thông qua như vậy?
Ngoài ra, điểm sử dụng <?>
là gì khi bạn phải sử dụng phương thức trợ giúp bằng cách sử dụng <T>
. Sẽ không tốt hơn khi sử dụng trực tiếp T
có thể được suy ra?
Đây là những gì Eclipse cung cấp cho tôi: 'Tập phương thức (int, capture # 1-of?) Trong loại List Không áp dụng cho các đối số (int, capture # 2-of ?) 'Âm thanh thậm chí còn vô lý hơn. –
Tôi vừa viết một [câu trả lời] (http://stackoverflow.com/questions/30797805/understanding-a-captured-type-in-java/30798066#30798066) giải thích việc chụp lấy ký tự đại diện cho một câu hỏi khác. Thông tin đó dường như có liên quan cho câu hỏi này. – Lii