Tôi có một cái gì đó dọc theo dòng:"bất ngờ dấu hiệu" sử dụng ký tự đại diện thấp hơn giới hạn (Java)
interface Foo<T> {
//... lines [0,45]...
/*line 46*/ <R, X super T&R> List<X> weave(R value);
//...
}
Nhưng IntelliJ được báo cáo:
- Lỗi: (46, 18) java: > dự kiến
- Lỗi: (46, 19) java: bắt đầu bất hợp pháp của loại
- Lỗi: (46, 26) java: '(' dự kiến
- Lỗi: (46, 28) java: < định danh> dự kiến
- Lỗi: (46, 29) java: 'l' dự kiến
- Lỗi: (46, 43) java: < định danh> dự kiến
vấn đề là gì? Tôi không được phép ràng buộc tên với giới hạn dưới? Hay tôi chỉ được phép sử dụng biểu thức R&X
ở giới hạn trên?
Thay đổi nó để
interface Foo<T> {
//... lines [0,45]...
/*line 46*/ <R> List<? super T&R> weave(R value);
//...
}
mang
- Lỗi (46, 31) java:> dự kiến
- Lỗi (46, 32) java: '(' dự kiến
- Lỗi (46, 33) java: bắt đầu bất hợp pháp của loại
@rgettman FYI câu trả lời của bạn là chính xác. Các downvoter và những người mà biện minh cho downvote đã nhầm lẫn wildcards với các thông số loại. "Bạn không thể khai báo biến kiểu siêu": http://stackoverflow.com/questions/2800369/bounding-generics-with-super-keyword ", bạn không thể khai báo hai giới hạn là các tham số kiểu chung chung" : http://stackoverflow.com/questions/13101991/java-generics-make-generic-to-extends-2-interfaces –