PDA

View Full Version : [JAVA] classi e metodi generici


MarcoLRM
12-12-2014, 11:23
ciao a tutti.
è da molto che vi seguo e non ho mai scritto perché c'è sempre stato un thread che risolveva i miei dubbi, ma ora sto impazzendo.
chiedo gentilmente il vostro aiuto.
sto studiano i generici, tipi, classi e metodi. ho fatto un test, ma non mi funziona e non capisco perché.
ecco il listato:

public class Prodotto {
private String marca;
private double costo;

public Prodotto(String marca, double costo){
this.marca=marca;
this.costo=costo;
}

@Override
public String toString(){
return marca+"-"+costo;
}
}

public class TV extends Prodotto{
private int pollici;
public TV(String marca, double costo, int pollici){
super(marca, costo);
this.pollici=pollici;
}

@Override
public String toString(){
return super.toString()+"-"+pollici;
}
}

public class Decoder extends Prodotto {
private boolean satellitare;

public Decoder(String marca, double costo, boolean satellitare){
super(marca, costo);
this.satellitare=satellitare;
}

@Override
public String toString(){
return super.toString()+"-"+satellitare;
}
}

public class Magazzino<P extends Prodotto> {
private LinkedList<P> magazzino;

public void aggiungi(P elemento){
magazzino.add(elemento);
}

public void rimuovi(int index){
magazzino.remove(index);
}

public LinkedList<P> getMagazzino(){
return magazzino;
}
}

voglio mettere nel mio magazzino, solo tv e decoder.
la classe magazzino, gestisce il tipo generico P che è Prodotto o sua sottoclasse.

se scrivo

LinkedList<Prodotto> m = new LinkedList<>();
m.add(new TV("samsung", 125.0, 32));
m.add(new Decoder("sky", 43.0, true));
m.add(new Decoder("telesystem", 12.0, false));

for (Iterator<Prodotto> iterator = m.iterator(); iterator.hasNext();) {
Prodotto next = iterator.next();
System.out.println(next);
}


funziona tutto.
se scrivo :

Magazzino<Prodotto> m = new Magazzino<>();
m.aggiungi(new TV("samsung", 125.0, 32));
m.aggiungi(new Decoder("sky", 43.0, true));
m.aggiungi(new Decoder("telesystem", 12.0, false));

for (Iterator iterator = m.getMagazzino().iterator(); iterator.hasNext();) {
Object next = iterator.next();
System.out.println(next);
}


l'istruzione
m.aggiungi(new TV("samsung", 125.0, 32));

da errore di Exception in thread "main" java.lang.NullPointerException

nella classe magazzino, l'istruzione che da errore è
magazzino.add(elemento)

del metodo

public void aggiungi(P elemento){
magazzino.add(elemento);
}


mi spiegate dove sbaglio? perché elemento è NULL?

grazie in anticipo
Marco.

vittorio130881
12-12-2014, 11:37
sono ancora niubbo provo a sparare cosi imparo pure io :)

ma dove instanzi private LinkedList<P> magazzino;
???

tagan
12-12-2014, 11:44
sostituisci
private LinkedList<P> magazzino;

con
private LinkedList<P> magazzino = new LinkedList<>()

è "magazzino" ad essere null, non "elemento"

ciao

vittorio130881
12-12-2014, 21:20
Tagan domandamia semplice. In questo caso istanziare,magazzino è.come creare una variabile di istanza giusto? Della classe Magazzino