2012-04-03 25 views
6

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 ...

+0

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. –

+0

@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). –

Trả lời

10

tôi sẽ cố gắng xác định giới hạn một cách rõ ràng, như thế này:

return this.<A,B,Map<A,B>>method(a,b); 

Tuy nhiên, tổng quát hơn, tôi không thấy sự cần thiết của các tham số kiểu C. Không có tham số nào của method hoặc tham chiếu kiểu trả về C, vì vậy nếu bạn có thể thay đổi chữ ký của method, tôi sẽ bỏ qua hoàn toàn tham số kiểu đó.

+0

Ah, xin lỗi, đây thực sự là một lớp mẫu nhỏ đơn giản tập trung vào lỗi. Các phương thức * real * sử dụng tất cả các tham số kiểu. –

+0

+1 và cảm ơn! Làm việc như một say mê !! –

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