Socrate ha scritto:
1) Sull'contains e l'indexof si infatti verifico semplicemente che tale oggetto sia presente nella lista (non mi sono posto il problema di un'eventuale ridefinizione)
Forse non hai compreso quanto dicevo .... il equals() implementato in Object si basa solo sulla "identità" degli oggetti (cioè this == altroOggetto).
Questo significa che se nel concessionario metti un oggetto Automobile X ma poi al metodo Disponibilità passi un altro oggetto Automobile Y che è
distinto da X ma con gli
stessi dati, non te lo troverà!
Ridefinire opportunamente equals permette di definire il concetto di uguaglianza basandosi sul contenuto degli oggetti invece della loro identità.
Socrate ha scritto:
3) Perché se io ad esempio creo un oggetto automobile per esempio: bmw x5 1000cavalli 500cc ecc.. Questa stessa automobile può essere presente in più concessionari, magari avente un prezzo diverso in base a quale concessionario la vende.
Quando si fa una classe tipo l'Automobile c'è sempre la questione di che cosa rappresenta: 1) il concetto generico di un modello? Oppure 2) una automobile concreta ben precisa?
Se rappresenta solo un modello generico, è ovvio che più concessionari lo possono avere. Se rappresenta una automobile concreta (perché magari ci metti anche la targa) ... è ovvio che NON può essere condivisa.
Da quanto dici, deduco che è il caso 1).
Socrate ha scritto:
4) Ok chiarissimo, ma del tipo? Se ho una lista di tipo automobile presente nella classe concessionario, come posso associare ad ogni oggetto presente in tale lista un attributo aggiuntivo che mi rappresenta la disponbilità?
Il concessionario può clonare l'Automobile ogni volta che ne riceve una da inserire.
Altrimenti bisogna cambiare la struttura dati, tipo:
1) Invece di un List<Automobile> fai un List<AutoConcessionario> dove AutoConcessionario è una classe con 2 dati: un riferimento ad Automobile e il flag disponibilità. Questo ovviamente cambia anche la logica di ricerca.
2) Se Automobile fosse "immutabile" (non lo posso sapere come l'hai fatta), lo puoi usare come "chiave" in una mappa Map<Automobile,Boolean> da affiancare (o sostituire) alla lista.