2012-11-15 16 views
5

Perché viene visualizzato questo errore del compilatore su FuzzyWuzzyContainer?Errore di compilazione sul parametro type con più limiti

Bound disallineamento: il tipo fuzzywuzzy non è un valido sostituto per la parametro limitata <T extends Fuzzy & Comparable<T>> del tipo FuzzyContainer

fuzzywuzzy in effetti implementa entrambe le interfacce definite nel generico limitata .

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

Vuoi 'FuzzyWuzzy implementa Fuzzy, confrontabile '? –

+0

Purtroppo no. – Robin

risposta

3

Prova dichiarando FuzzyContainer come questo:

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

Ciò è necessario in quanto FuzzyWuzzy strumenti Comparable<Fuzzy> piuttosto che Comparable<FuzzyWuzzy> (si potrebbe anche fare questo cambiamento, come The Cat pointed out).

+2

Grazie. Ho una impronta sulla tastiera sulla mia fronte cercando di capirlo ieri che ora può logorarsi ;-) – Robin

4

Il problema è FuzzyWuzzy implements Comparable<Fuzzy>. Lo FuzzyContainer si aspetta che entrambi glis in FuzzyContainer<T extends Fuzzy & Comparable<T>> siano dello stesso tipo. FuzzyWuzzy implementa Fuzzy ma non implementa Comparable<FuzzyWuzzy>.

prova, FuzzyWuzzy implements Fuzzy, Comparable<FuzzyWuzzy>

+0

Buona risposta, sfortunatamente non è quella giusta per il mio particolare caso d'uso. – Robin

Problemi correlati