Ciao, sto eseguendo un esercizio che prevede di caricare vari tipi di Merce (es. A, B, C) su di un Automezzo.
E' previsto però, che si possa settare un Automezzo al carico di un solo tipo di Merce (es. A).
Ho pensato di utilizzare i Generics definendo la classe: Automezzo <E extends CategoriaMerce> dove CategoriaMerce è la super classe dei singoli tipi di merce (A, B, C).
Quando uso il metodo caricaAutomezzo, vado a popolare una lista così definita: List<E> lista = new ArrayList<>();
Fin qui funziona tutto.
L'esercizio richiede anche che si possa trasferire la merce da un'Automezzo all'altro, lasciando sul primo solo la merce che non è caricabile sul secondo.
Cerco di trasferire la merce utilizzando il metodo sotto riportato, ma, per via dell' erasure, nel caso dell'automezzo "dedicato", non mi è possibile effettuare il controllo del tipo tra "s" (che è la merce iterata nella lista) e il tipo generico precedentemente settato nel main per "aut2".
public void trasferisciMerce (Automezzo<E> aut1, Automezzo<E> aut2) {
for(Iterator<E> itr = aut1.lista.iterator(); itr.hasNext()
{
E s = itr.next();
if(itr.equals(aut2)) {
aut2.caricaAutomezzo(s);
if(a == 1) {
itr.remove();
aut1.disponM3 = aut1.disponM3+s.getM3Merce();
aut1.disponKg = aut1.disponKg+s.getPesoTotaleCollo();
aut1.nuovaVel = aut1.nuovaVel+(s.getPesoTotaleCollo()/100);
}
} else System.out.println("Tipologia non compatibile");
}
Non dovrei usare i generics? Sapete consigliarmi altro?
Grazie mille a tutti in anticipo.
E' previsto però, che si possa settare un Automezzo al carico di un solo tipo di Merce (es. A).
Ho pensato di utilizzare i Generics definendo la classe: Automezzo <E extends CategoriaMerce> dove CategoriaMerce è la super classe dei singoli tipi di merce (A, B, C).
Quando uso il metodo caricaAutomezzo, vado a popolare una lista così definita: List<E> lista = new ArrayList<>();
Fin qui funziona tutto.
L'esercizio richiede anche che si possa trasferire la merce da un'Automezzo all'altro, lasciando sul primo solo la merce che non è caricabile sul secondo.
Cerco di trasferire la merce utilizzando il metodo sotto riportato, ma, per via dell' erasure, nel caso dell'automezzo "dedicato", non mi è possibile effettuare il controllo del tipo tra "s" (che è la merce iterata nella lista) e il tipo generico precedentemente settato nel main per "aut2".
public void trasferisciMerce (Automezzo<E> aut1, Automezzo<E> aut2) {
for(Iterator<E> itr = aut1.lista.iterator(); itr.hasNext()

E s = itr.next();
if(itr.equals(aut2)) {
aut2.caricaAutomezzo(s);
if(a == 1) {
itr.remove();
aut1.disponM3 = aut1.disponM3+s.getM3Merce();
aut1.disponKg = aut1.disponKg+s.getPesoTotaleCollo();
aut1.nuovaVel = aut1.nuovaVel+(s.getPesoTotaleCollo()/100);
}
} else System.out.println("Tipologia non compatibile");
}
Non dovrei usare i generics? Sapete consigliarmi altro?
Grazie mille a tutti in anticipo.