Quote Originariamente inviata da andbin Visualizza il messaggio
Mah ... il codice è comunque sbagliato, almeno per come l'hai postato qui.
Effettivamente avevo sbagliato la trascrizione però solo della seconda riga.
Questo è il main così come è scritto sul manuale.

codice:
public class TestAnimali
{
    public static void main(String args[])
    { 
         Animale<Erbivoro> tigre = new Carnivoro<Erbivoro>();
         Erbivoro<Erba> erbivoro = new Erbivoro<Erba>();
         tigre.mangia(erbivoro);
    } 
}

Quote Originariamente inviata da andbin Visualizza il messaggio
Se Carnivoro è definito come:

public class Carnivoro implements Animale<Erbivoro>

allora NON puoi fare new Carnivoro<Erbivoro>()

Il punto è che per poter fare una istanziazione del tipo Carnivoro<UnTipoReale> la classe Carnivoro dovrebbe avere una type variable e .... non ce l'ha.

Idem per Erba.
Quindi la dichiarazione della classe dovrebbe essere così:

public class Carnivoro<Erbivoro> implements Animale<Erbivoro>

Giusto?