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.