2012-04-02 26 views
10

Các mã sau biên dịch sử dụng JDK6 (Tôi đã thử 1.6.0_24)Tham số kiểu tự tham chiếu lẫn nhau trong JDK6 chứ không phải 7?

class XY<A extends XY<A, B>, B extends XY<B, A>> { } 

Nhưng biên soạn theo JDK7 (ví dụ 1.7.0), tôi nhận được lỗi này:

XY.java:1: error: type argument B is not within bounds of type-variable A 
class XY<A extends XY<A, B>, B extends XY<B, A>> { 
            ^
    where B,A are type-variables: 
    B extends XY<B,A> declared in class XY 
    A extends XY<A,B> declared in class XY 
1 error 

Can bất cứ ai có điểm là liệu đây có phải là một sự thay đổi có chủ ý đối với Generics của Java không?

+0

Nó biên dịch tốt cho tôi với Java> = 1.7.0_02 –

+0

Thật sao? Bạn có chắc không? Tôi đang sử dụng ** 1.7.0_02-b13 ** –

+0

Điều này thật thú vị. Nó được biên dịch trong Eclipse với các tính năng Java 7. Tôi đã thử nó thông qua dòng lệnh và chắc chắn đủ tôi nhận được lỗi trình biên dịch tương tự. –

Trả lời

4

Dường như đó là lỗi xuất phát từ OpenJDK và do lỗi thay thế kiểu biến.

Nó xuất hiện khi bạn chuyển biến chung cho ví dụ:

class XY<A extends XY<A, B>, B extends XY<B, A>> { } 
class XY<A extends XY<B, A>, B extends XY<A, B>> { } 

Nó không xuất hiện trong này:

class XY<A extends XY<A, B>, B extends XY<A, B>> { } 
class XY<A extends XY<B, A>, B extends XY<B, A>> { } 

bạn có thể thấy một ví dụ ở đây: http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html

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