2012-08-01 12 views
12

Olası Çoğalt:
Type-parameterized field of a generic class becomes invisible after upgrading to Java 7Neden bir parametrenin özel alanı Java 6'da genel bir yönteme görünür, ancak Java 7'de görünmüyor?

public class Test{ 

    private String _canYouSeeMe = "yes"; 

    <T extends Test> void genericMethod(T hey){ 
     String s = hey._canYouSeeMe; 
    } 

    void method(Test hey){ 
     String s = hey._canYouSeeMe; 
    } 
} 

JDK 1.6 karşı bina bu sadece iyi derler ama 1.7 karşı genericMethod() bir derleyici hata var: alan Testi. _canYouSeeMe görünmüyorsa

hata _canYouSeeMe ziyade korunmuş yaparak çözülebilir

Özel daha, ama sadece bir sınıfın 1.7

+2

hata veya uyarı derlemek olur oysa (alt test Testi uzanır)? – kosa

+0

neden olmasın? Bu aynı sınıfın bir metodu değil mi? ve statik olmayan da. – Qnan

+0

@fmucar 1.6.0_24 openjdk ile burada derlenmiş. –

cevap

7

alt sınıflara (T) 1.6'dan nelerin değiştiğini merak ediyorum (Test) üst sınıfının özel alanlara erişimi asla. Bu, Java 6 derleyicisinde Java 7'de düzeltilen bir hataydı.

Unutmayın: TTest'un bir alt sınıfıdır. Bu değilT 'ın sınıf özel alan & yöntem biçimde ulaşması için gerekli koşul olan Test.class olduğu anlamına yapar.

+0

bu kısmen doğrudur, ancak özel alan erişme kod superclass kendisinde olduğundan, bunun erişime – Qnan

+2

@Matt olmalıdır söyleyebilirim: Ben alamadım. Eğer bu doğru olsaydı, o zaman neden “Test” (ki bu tamamen meşrudur ve hatta bir uyarı bile üretmez) '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''? –

+0

+1 Java 7'deki bir dizi hata, uyumsuzluğa neden olmamak için Java 7'ye kadar düzeltilmedi. –

1

@Joachim'e yanıt olarak - bir yorum için çok uzun.

Bu derlemek olmaz gerçeğiyle tutarlıdır:

void method(SubTest hey) { 
    String s = hey._canYouSeeMe; 
} 

bu

void method(SubTest hey) { 
    String s = ((Test) hey)._canYouSeeMe; 
} 
+0

İkinci örnek, "SubTest" bir üst düzey sınıf olduğunda (Java 6 ve 7'de) derlenmez. –

+0

@MattBall: neden olmasın? "Alt Test", "Test" i uzattığı sürece. Benim için derler. –

+0

@MattBall, 'method' Test'in bir üyesi ise,' SubTest 'bir üst düzey sınıf olsa bile derleme yapar. – assylias

İlgili konular