2010-11-10 31 views
6

ile değil KQUEUE hatası Bu benzer bir sınıf hiyerarşisi bulunabilir. Bunu Eclipse derleyicisi veya Java 1.6 ile derlemek gayet iyi çalışır (ideone'da görüldüğü gibi). Ayrıca, yalnızca sona ya -target 1.5 kullanarak JDK 1.6 ile olmaz unutmayınGüneş JDK 1.5 jenerik

TestDereference.java:12: test.SubInterface cannot be dereferenced 
       System.out.println(mi.getSubInterface().getField()); 
                ^

: Java 1.5 (ki projemizin gerekliliklerden biridir) ile bu derlemeye çalışırsanız Ancak aşağıdaki hatayı veriyor JDK 1.5

sadece vakalar bu hata ben böyle şeyler yapıyor ilişkili web üzerinde bulduğu ortaya çıktığında:

double d = 2.0; 
d.toString(); 

o sorunun ne aşikar nerede.

Ama getSubInterface() kesinlikle getField() yöntemi olan SubInterface uygulama sınıfıyla döndüren olduğu açıktır çünkü benim davam o çalışmalıdır.

Yani bu bir derleyici hata olduğunu? Ya seçenekleri var çalışır, ancak Eclipse bir hata olarak işaretlemek olmadığından, takımdaki çoğu insan bunu unutur, ve bunların çoğu bu yüzden onlar değil sadece JDK 1.6 kullanmak her seferinde (mi.<SubInterface>getSubInterface() yapıyor yanı sıra maven/cmd satırı ile derlerken dikkat edin)?

+0

tam olarak kullandığınız Ne JDK sürümleri? –

+0

1.5.0_22 ve 1.6.0_20 (Javac -version' 'e göre) (5 ve 6?) –

+0

Eğer 1.5' -source derleyici bayrağı' deneyin ya ne olur sen yerine 1.5 Eclipse Derleyici Uyum düzeyini ayarlamak durumunda 1.6? –

cevap

1

Kontrol hata: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5003431

Birinci seçenek:

SubInterface si = mi.getSubInterface(); 
si.getField(); 

İkinci seçenek:

mi.<SubInterface>getSubInterface().getField() 
+0

Yani sanırım 1.5 ile sıkışmış olsam, bu iki seçenek dışında yapabileceğim fazla bir şey yok. Sanırım biraz daha zarif bir şey için umuyordum, ama bunu yapmak zorunda kalacak. –

+0

Cevabınızı, yalnızca 1.6'da düzeltildiğini gösteren hata raporuna verdiğiniz için kabul ettim –

1

Bu java6 giderilmiştir bir hata olduğunu tahmin ediyorum. şeyler java5 ve 6 hem çalışmak yapacaktır şöyle

ana yöntem Yeniden Yazma:

public static void main(String[] args) { 
    SubInterface subInterface = mi.getSubInterface(); 
    System.out.println(subInterface.getField()); 
} 

O Java5 düzgün zaten SubInterface uzanır ilan ediyor olsa da, tip T türetmek için atama ihtiyacı görünüyor. Java6 bunu doğru şekilde ele alır ve ek atamaya ihtiyaç duymaz.