Salve, ho un problema credo semplice in un contesto un po' complicato da spiegare.
Sto simulando un carrello di acquisti di libri e DVD, ogni articolo è dotato di titolo e prezzo, rispettivamente String e double. Riesco a visualizzare correttamente il totale ma non l'elenco dei titoli acquistati, che vanno a popolare un ArrayList di String.
Libro.java (DVD.java è analogo...)
codice:
class Libro implements ElementiCarrello {
private String titolo;
private double prezzo;
public Libro(String titolo, double prezzo) {
this.titolo = titolo;
this.prezzo = prezzo;
}
@Override
public String getTitolo() {
return titolo;
}
@Override
public double getPrezzo() {
return prezzo;
}
@Override
public void accetta(Visitor visitor) {
visitor.visita(this);
}
}
L'interface ElementiCarrello.java non fa altro che dichiarare i metodi di cui qui c'è l'override.
Ho poi una interface Visitor.java con la quale predisporre le chiamate ai metodi in base all'articolo acquistato:
codice:
public interface Visitor {
public void visita(Libro libro);
public void visita(DVD dvd);
}
Quindi la classe CarrelloTotale.java, dove la dimensione dell'ArrayList resta zero e quindi non mi trova nulla col for...
codice:
import java.util.ArrayList;
class CarrelloTotale implements Visitor {
private double totale;
private Carrello carrello;
private ArrayList<String> titoli = new ArrayList<String>();
public CarrelloTotale(Carrello carrello) {
this.carrello = carrello;
this.totale = 0.0;
}
public void visita(Libro libro) {
titoli.add(libro.getTitolo()); // non aggiunge
totale += libro.getPrezzo(); // aggiorna il totale
}
public void visita(DVD dvd) {
titoli.add(dvd.getTitolo()); // non aggiunge
totale += dvd.getPrezzo(); // aggiorna il totale
}
public void getTitoli() {
System.out.println("Titoli acquistati: " + titoli.size());
for (String tit : titoli) {
System.out.println(tit);
}
}
La parte di gestione del totale l'ho omessa poiché funziona tranquillamente.
Vorrei capire perché i metodi visita() non aggiungono i titoli all'ArrayList. Grazie.
Spero che il problema sia esposto chiaramente.