Si consideri il codice:tipo derivato non è un sostituto valido per un tipo generico Paragonabile
public abstract class Item<T> implements Comparable<T>
{
protected T item;
public int compareTo(T o)
{
return 0; // this doesn't matter for the time being
}
}
public class MyItem<T> extends Item<String>
{
T object;
}
public class Foo<T>
{
protected ArrayList<T> list;
}
public class Bar<V> extends Foo<MyItem<V>>
{
public void sort()
{
Collections.sort(list);
}
}
La chiamata sorta dà l'errore:
Bound mismatch: The generic method sort(List< T >) of type Collections is not applicable for the arguments (ArrayList< MyItem< T > >). The inferred type MyItem< T > is not a valid substitute for the bounded parameter < T extends Comparable< ? super T > >
Perché questo è sbagliato?
Se MyItem<V>
implementa Comparable
allora perché non è un sostituto?
Scusate se è stato chiesto, ma ritengo che la domanda sia in qualche modo specifica.
Quella era perfetto. Saluti! Per chiarimenti, ho incluso le classi extra perché il codice che ho fornito è una versione molto più semplificata del mio codice reale, e non ero sicuro di dove fosse il problema. Ho completamente perso il fatto che potevo semplicemente cambiare il confronto vero e proprio. Grazie ancora. – terrorcell
Migliore: 'classe astratta pubblica Articolo attrezzi comparabili estende l'articolo > '- no? –