Chúng tôi hiện có một lớp mà sẽ không biên dịch với openjdk 6. Lớp ngắn sau tái tạo lỗi này:Generics vấn đề - suy ra loại không phù hợp với tuyên bố ràng buộc (s)
public class Copy implements ICopy {
public <A,B extends List<A>,C extends Map<A,B>> A method(A a, B b) {
A something = null;
return something;
}
@Override
public <A,B extends List<A>> A method2(A a, B b) {
return method(a,b);
}
}
Giao diện rất đơn giản , nó chỉ cho thấy rằng chúng ta không thể thay đổi chữ ký của người method2
:
public interface ICopy {
public <A,B extends List<A>> A method2(A a, B b);
}
nó biên dịch với các phiên bản thầy mo java và openjdk 7 - nhưng không thành công với openjdk 6, và, tiếc là, đó là phiên bản mà chúng ta có để sử dụng để biên dịch mã (bản gốc).
Các thông báo lỗi là
Copy.java:15: invalid inferred types for C; inferred type does not conform to declared bound(s)
inferred: java.util.Map<A,B>
bound(s): java.util.Map<A,B>
return method(a,b);
^
Tất cả tôi cần là một số ý tưởng làm thế nào để thay đổi việc thực hiện method2
để nó sẽ biên dịch. Tôi thậm chí không quan tâm đến các cảnh báo trình biên dịch ...
trông giống như một lỗi. Trình biên dịch Eclipse và trình biên dịch của Sun không nói gì về điều này. –
@GuillaumePolet - một lỗi hoặc xử lý quá nghiêm ngặt các loại chung của phiên bản java đó. Và, có, eclipse không phàn nàn (mà làm cho nó khá phức tạp để tái tạo lỗi này khó chịu mà giết chết xây dựng). –