2012-04-02 10 views
10

(denedim 1.6.0_24)Karşılıklı kendini referanslama tipi parametreler JDK6 altında ancak 7 değil mi? Aşağıdaki kod JDK6 kullanarak derler

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

Ama JDK7 altında derleme (örneğin 1.7.0), bu hatayı alıyorum:

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 Bu, herkesin Java'nın jeneriklerine yönelik kasıtlı bir değişiklik olup olmadığını olarak işaret eder?

+0

O iyi derler sen örnekler için jenerik değişkenleri geçtiğinizde

Öyle görünüyor Benim için Java> = 1.7.0_02 –

+0

Gerçekten mi? Emin misiniz? Ben kullanıyorum ** 1.7.0_02-b13 ** –

+0

Bu eğlenceli. Java 7 özellikleriyle Eclipse'de derleniyor. Komut satırı ile denedim ve aynı derleyici hatasını aldığımdan eminim. –

cevap

4

Bu, OpenJDK'den gelen ve tür değişken değiştirme durumunda bir hatadan kaynaklanan bir hata gibi görünüyor.

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

Bu görünmez: Burada başka bir örnek görebilirsiniz

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

: http://old.nabble.com/Apparent-generics-compilation-bug-new-to-Java-1.7-td33378164.html

İlgili konular