2012-11-15 14 views
5

Dlaczego otrzymuję ten błąd kompilatora na FuzzyWuzzyContainer?Błąd kompilacji dla parametru typu z wieloma ograniczeniami

Związane Niedopasowanie: typ fuzzywuzzy nie jest prawidłową substytut dla ograniczonego parametru <T extends Fuzzy & Comparable<T>> typu FuzzyContainer

fuzzywuzzy ma w rzeczywistości realizować oba interfejsy, które są zdefiniowane w ograniczonym generic .

public interface Fuzzy 
{ 
    boolean isFuzzy(); 
} 

public class FuzzyWuzzy implements Fuzzy, Comparable<Fuzzy> 
{ 
    public boolean isFuzzy() {return true;} 
    public int compare(Fuzzy o) {return 0;) 
} 

public abstract class FuzzyContainer<T extends Fuzzy & Comparable<T>> 
{ 
    : 
} 

public class FuzzyWuzzyContainer extends Fuzzycontainer<FuzzyWuzzy> // Error is here 
{ 
} 
+0

Czy chcesz 'FuzzyWuzzy implementuje Fuzzy, Comparable '? –

+0

Niestety, nie. – Robin

Odpowiedz

3

Spróbuj deklarując FuzzyContainer takiego:

public abstract class FuzzyContainer<T extends Fuzzy & Comparable<? super T>> 

Jest to konieczne, ponieważ FuzzyWuzzy narzędzi Comparable<Fuzzy> zamiast Comparable<FuzzyWuzzy> (można również dokonać takiej zmiany, jak The Cat pointed out).

+2

Dziękuję. Mam odcisk klawiatury na moim czole, próbując wczoraj odkryć, że teraz może się zepsuć ;-) – Robin

4

Problem dotyczy FuzzyWuzzy implements Comparable<Fuzzy>. Model FuzzyContainer oczekuje, że zarówno FuzzyContainer<T extends Fuzzy & Comparable<T>> będą tego samego typu. FuzzyWuzzy implementuje Fuzzy, ale nie implementuje Comparable<FuzzyWuzzy>.

spróbować FuzzyWuzzy implements Fuzzy, Comparable<FuzzyWuzzy>

+0

Dobra odpowiedź, niestety nie jest odpowiednia dla mojego konkretnego przypadku użycia. – Robin

Powiązane problemy