2013-04-03 23 views
34

dönüş türünü zorlamak için bir yolu var mı yöntemin dönüş türü ile eşleşmez (Collection<Base>). Bunun neden olduğunu anlıyorum: jenerik tipler farklı olduğu için, iki sınıf kalıtımla ilgili değildir.Bir temel sınıf bir koleksiyon dönen bir yöntemi var Arrays.asList

Derleme hatasının, türetilen nesnelerden birini Temel'e dönüştürmek için, yöntemin dönüş türünü Arrays.asList kullanarak değiştirmemesini düzeltmenin birçok yolu vardır.

Derleyiciye, Arrays.asList çağrısının genel türünü çözümlediğinde farklı ancak uyumlu bir tür kullanmasını söylemenin bir yolu var mı? (Ben bu kalıbı kullanmaya çalışıyorum ve bu sorun haline çalışan, bu yüzden o iş yapmak için bir yolu varsa, bunu bilmek istiyorum tutun.)

Sana

Collection<Base> getCollection() 
{ 
    return Arrays.asList<Base>(new Derived(), 
           new Derived()); 
} 
gibi bir şey yapabileceğini düşündüm

Bunu derlediğimde (java 6), derleyici, virgülle bir ')' beklediğinden şikayet ediyor.

+3

Diziler. asList –

cevap

47

Sözdizimi neredeyse doğru; <Base> yöntem adından önce gider:

return Arrays.<Base>asList(new Derived(), 
          new Derived()); 

Java 8

Java 8 için, onun improved target type inference ile, açık tip argüman gerekli değildir. Yöntemin dönüş türü Collection<Base> olduğundan, type parametresi Base olarak çıkarılacaktır.

return Arrays.asList(new Derived(), 
        new Derived()); 

Açık tip parametresi, Java 7 ve alt için hala gereklidir. Java 8'de açık tip parametresini hala sağlayabilirsiniz; isteğe bağlı.

+0

Wow, bunu hiç duymadım –

+0

Java 8'de, parametreyi sağlamanız gereken durumlar var. Bunu “MyClass” gibi şeyler yapmaya başladım. builder() someMethodWithGenericSignature (türetilmiş) veya benzer bir şey. –

İlgili konular