ArrayList di Oggetti

di il
4 risposte

ArrayList di Oggetti

Salve a tutti, sono nuovo e ho iniziato a programmare da poco, non so se sto chiedendo una cosa troppo banale ma ho questo dubbio e ci provo.
Ho un ArrayList (una biblioteca) che contiene oggetti di tipo Libro, che sono estesi da oggetti della classe LibroPerBambini(hanno una variabile in più dell'età consigliata), sempre contenuti nell'ArrayList.
Ora io devo applicare un metodo contenuto nella classe Biblioteca:" int perBambini(int n): conta quanti libri per bambini di età minore o uguale a n sono presenti in biblioteca."
Ho creato un metodo getEtaConsigliata nella classe LibroPerBambini , ma essendo l'array di tipo Libro, quindi nella classe Libro non c'è questo metodo, non me lo riconosce.
Come posso fare? Grazie mille.

4 Risposte

  • Re: ArrayList di Oggetti

    potenik ha scritto:


    ma essendo l'array di tipo Libro, quindi nella classe Libro non c'è questo metodo, non me lo riconosce.
    Se è un ArrayList<Libro> gli oggetti li "vedi" normalmente appunto solo come Libro. Però in generale puoi testare se un oggetto è di un tipo più specifico usando l'operatore instanceof (che in teoria dovresti già conoscere). E se è di quel tipo più specifico, allora puoi fare un cast esplicito al tipo e quindi poter "vedere" quei metodi più specifici.
  • Re: ArrayList di Oggetti

    Mi era totalmente sfuggito instanceof! Grazie mille!
  • Re: ArrayList di Oggetti

    potenik ha scritto:


    Mi era totalmente sfuggito instanceof! Grazie mille!
    Prego. C'è però un'altra questione più concettuale. Testare il tipo e poi fare un cast non è il massimo, detto in generale, (specialmente se i casi fossero svariati). Ci sono scenari in cui non se ne può fare a meno ma dipende.

    Se non hai vincoli (che ovviamente non posso sapere), si potrebbe pensare questo:

    - getEtaConsigliata in realtà può essere visto in generale, ovvero non per un tipo specifico ma per "tutti" i libri (pensa ai "libri per adulti").
    - per sapere se un libro è per bambini, anche qui si può vedere la cosa più in generale, nel senso che si può mettere in Libro una tipologia del libro (ad esempio con una enum) oppure potrebbe bastare un boolean isPerBambini() per cui solo la classe LibroPerBambini lo ridefinisce per dare true.

    Insomma, il succo è che ragionando un po' più in generale si PUO' evitare il test/cast del tipo.
  • Re: ArrayList di Oggetti

    Si ho capito, per ora non mi complico le cose e ho lasciato il cast, magari poi vedo che riesco a fare, grazie ancora, molto gentile
Devi accedere o registrarti per scrivere nel forum
4 risposte