Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    Contenitori ed interfaccie

    Sto studiando la gestione degli oggetti con i contenitori e sul libro su cui lo sto facendo dopo alcuni esempi in cui questi contenitori venivano inizializzati in questo modo:
    codice:
    ArrayList<Integer> a = new ArrayList<Integer>;
    Siamo passati a questa forma:
    codice:
    Collection<Integer> c = new ArrayList<Integer>;
    Quello che credo di aver capito è che nel secondo caso implemento i metodi dell'interfaccia Collection con quelli della classe ArrayList e quindi rispetto al primo esempio ho un numero maggiori di metodi per lavorare sul contenitore c. Tuttavia mi sento di non aver chiaro questo concetto quindi mi rivolgo a chi ne sa più di me per avere qualche delucidazione ed eventuale correzione su quello che ho appena detto.

    Grazie in anticipo come sempre.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Contenitori ed interfaccie

    Originariamente inviato da Pacio88
    nel secondo caso implemento i metodi dell'interfaccia Collection con quelli della classe ArrayList
    No, è possibile semplicemente perché ArrayList implementa la interfaccia List che a sua volta estende Collection. Quindi ArrayList è-un Collection.

    Concettualmente, più o meno come se si facesse:
    CharSequence seq = new String("blabla");

    Originariamente inviato da Pacio88
    quindi rispetto al primo esempio ho un numero maggiori di metodi per lavorare sul contenitore c.
    No, il contrario. Tramite Collection si ha una "visione" più ristretta della collezione. Mentre una implementazione "concreta" può fornire più metodi dedicati e specifici per il suo tipo di collezione.
    Es. ArrayList ha il metodo trimToSize() per aggiustare la capacità alla dimensione attuale effettiva. Questo è ovvio ... ArrayList è basato su un array, quindi ha senso solo lì. Collection è più "astratto", non ha un trimToSize() ... non avrebbe senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    Re: Re: Contenitori ed interfaccie

    Grazie andbin...

    Però mi sfugge ancora quali sono i pro e i contro tra i due tipi di inizializzazione che ho postato inizialmente.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Contenitori ed interfaccie

    Originariamente inviato da Pacio88
    Però mi sfugge ancora quali sono i pro e i contro tra i due tipi di inizializzazione che ho postato inizialmente.
    Beh ma dipende da cosa devi fare di preciso .... la questione è solo il livello di "astrazione" che si vuole poter avere e gestire.

    Se usi il secondo assegnamento, si presuppone che magari più avanti nel codice tu abbia necessità di assegnare a quella variabile una istanza di un'altro tipo di collezione es. un HashSet che è anche lui un Collection. Proprio perché magari devi lavorare "sapendo" solo che è un Collection e basta.
    Se invece l'obiettivo è solo quello di usare specificatamente un ArrayList, il secondo assegnamento addirittura può esserti di impiccio ... perché "restringe" la visione della collezione e non ti permette di fare cose più specifiche.

    Uno dei principi basilari della OOP è quello di cercare di codificare, ove possibile e ha senso, verso una interfaccia (qui interfaccia è da intendere in senso generale .... come tipo più generico/astratto, non necessariamente una interface!)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.