2015-06-16 9 views
10

Występuje problem z niezgodnymi typami zwracania przy użyciu dziedziczenia."Próba użycia niekompatybilnego typu zwracanego" z dziedziczeniem interfejsu

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

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

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

Czy istnieje sposób, aby to zadziałało?

Teraz kompilator mówi mi, że „Próba użycia niezgodnego typu zwracanej” na interfejsie D.

+0

@alfasin poprawne pytania aktualizowane - przepraszam! – jjNford

+0

To duża zmiana w stosunku do pytania. @ user3707125: ma wtedy swoje rozwiązanie. –

+0

Brzmi jak odpowiedź tutaj chłopaki ... – vikingsteve

Odpowiedz

17

Proponuję użyć

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

mówi ten „mapę, która odwzorowuje String do A lub podtypu A ". Jest to zgodne z Map<String, B>.

+0

Tak! To doprowadzało mnie do szału. Miałem metodę interfejsu zadeklarowaną, aby zwrócić 'Set ' i zestaw klasy implementującej zwracający 'Set '. Powodowało to błąd w pytaniu. Zmieniając deklarację interfejsu na "Set 'naprawił mój problem. Dziękuję Ci! –

1

Wprowadź następujące zmiany:

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

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