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...)
L'interface ElementiCarrello.java non fa altro che dichiarare i metodi di cui qui c'è l'override.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); } }
Ho poi una interface Visitor.java con la quale predisporre le chiamate ai metodi in base all'articolo acquistato:
Quindi la classe CarrelloTotale.java, dove la dimensione dell'ArrayList resta zero e quindi non mi trova nulla col for...codice:public interface Visitor { public void visita(Libro libro); public void visita(DVD dvd); }
La parte di gestione del totale l'ho omessa poiché funziona tranquillamente.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); } }
Vorrei capire perché i metodi visita() non aggiungono i titoli all'ArrayList. Grazie.
Spero che il problema sia esposto chiaramente.


Rispondi quotando
