2012-04-03 12 views
6

ilan anlaşılmaktadır tipi uymuyor ama OpenJDK 6 ile başarısız olur ve, maalesef, sahip olduğumuz sürümü -Jenerik sorunu bağlı (ler) Aşağıdaki kısaltılmış sınıfı bu hatayı çoğalır Şu anda OpenJDK 6. ile derlemek olmaz bir sınıf var

public interface ICopy {  
    public <A,B extends List<A>> A method2(A a, B b); 
} 

o kahinler java sürümleri ve OpenJDK 7 ile derler:, sadece biz method2 imzasını değiştiremezsiniz olduğunu gösterir (orijinal) kodu derlemek için kullanmak.

hata mesajı

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); 
          ^

Ben derlemek böylece method2 uygulanmasını nasıl değiştirileceği bazı fikirler gereken her şey. Hatta ... derleyici uyarıları hakkında umurumda olmaz

+0

bir böcek gibi görünüyor. Eclipse derleyicisi ve Sun'ın derleyicisi bunun hakkında bir şey söylemiyor. –

+0

@GuillaumePolet - bir hata ya da o java versiyonunun genel türler aşırı sıkı elleçleme. Ve, evet, tutulma şikayet etmez (ki bu yapıyı öldüren bu iğrenç hatayı yeniden üretmeyi oldukça karmaşık hale getirdi). –

cevap

10

böyle açıkça sınırları belirterek denemek:

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

Ancak daha genel olarak, ben tip parametresi için gerek görmüyorum C hiç. Eğer method imzasını değiştirebilir eğer öyleyse method savunmasından veya döndürme türü referansların hiçbiri C hiç, ben sadece tamamen o tür parametresi ihmal ediyorum.

+0

Ah, üzgünüm, bu gerçekten sadece hataya odaklanan küçük bir örnek sınıfı. * Gerçek * yöntemler tüm tip parametrelerini kullanır. –

+0

+1 ve teşekkürler! ÇALIŞIYOR bir cazibe gibi!! –

İlgili konular