2015-06-16 32 views
10

ile "Uyumsuz bir dönüş türü kullanma girişiminde bulunma" Kalıtım yoluyla geçersiz uyum türlerinde sorun yaşıyorum.Arabirim Kalıtımı

public interface A { } 
public interface B extends A { } 

public interface C { 
    Map<String, A> getMapping(); 
} 

public interface D extends C { 
    Map<String, B> getMapping(); 
} 

Bu işi yapmanın bir yolu var mı?

Şu anda derleyici Sana

interface C { 
    Map<String, ? extends A> getMapping(); 
} 

Bu diyor kullanmanızı öneririz Ben D.

+0

doğru @alfasin, sorular güncellendi - üzgünüm! – jjNford

+0

Sorunuzda büyük bir değişiklik var. @ user3707125: o zaman çözümünüz var. –

+0

Burada bir cevap gibi geliyor çocuklar ... – vikingsteve

cevap

17

arabirimde 'uyumsuz dönüş türü kullanmaya çalışmak' ediyorum söylüyor String eşler "bir harita A ya da A "" alt tipine. Bu Map<String, B> ile uyumludur.

+0

Evet! Bu beni deli ediyordu. "Set " öğesini ve " Setini" döndürmek için ayarlanmış bir uygulama sınıfını döndürmesi için bildirilen bir arabirim yöntemim vardı. Bu, sorudaki hatayla sonuçlandı. Arabirim beyanı "Set <" olarak mı değiştiriliyor? MyObjectInterface> 'sorunumu çözdü. Teşekkür ederim! –

1

aşağıdaki değişiklikleri yapın:

interface C<E extends A> { 
    Map<String, E> getMapping(); 
} 

interface D extends C<B> { 
    Map<String, B> getMapping(); 
}