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.
è 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.