Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Array Di Liste

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    137

    Array Di Liste

    Preciso che sono alle prima armi in java. Vorrei creare un array di liste. L'ho creato in questo modo , ma mi trova un errore:

    private List<Double> [] deplist;
    deplist = new List<Double> [3];
    for(int i=0; i<3; i++)
    deplist[i]= new ArrayList<Double>();


    Dove sbaglio? Aiutatemi.....

  2. #2
    Utente di HTML.it L'avatar di redmak
    Registrato dal
    May 2005
    Messaggi
    83
    Prova così

    codice:
    ArrayList<List> a = null;
    a.add(new List(0,true));

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

    Re: Array Di Liste

    Originariamente inviato da Macgiglio
    Vorrei creare un array di liste. L'ho creato in questo modo , ma mi trova un errore:
    Il compilatore ti ha segnalato che è un "generic array creation". Ed è un errore perché è proibito dal compilatore. Il motivo della esclusione di questa operazione è legato alla gestione degli array da parte della JVM e alla "erasure" con cui sono implementati i generics.

    Un array può essere creato solo di tipi "reifiable" (tradotto: reificabile). Un tipo è "reifiable" se può essere completamente rappresentato a runtime.
    Ora: List<Double> purtroppo non è reifiable, non può essere completamente rappresentato a runtime. Per via della solita "erasure", a runtime nell'array c'è solo la informazione che è di tipo List e basta, non c'è alcuna informazione che dica se l'array è di tipo List<Double> piuttosto che un List<String> o di un altro tipo parametrico.

    La spiegazione di questa questione sarebbe ben più lunga, non continuo solo per brevità. Istanziare un array generico non è permesso. Le alternative comunque ci sono.

    Una è quella di istanziare il "raw-type" cioè solo List:

    List<Double>[] deplist = (List<Double>[]) new List[3];

    Nota che è proibito istanziare un array generico ma è permesso dichiarare una variabile di quel tipo! Questo però comporta un warning (e non più un errore) dovuto al unchecked cast. A quel punto potresti continuare con quello che stavi facendo. Ma devi prestare attenzione, perché trattare array di tipi non reifiable è una questione molto delicata, che può portare a problemi molto subdoli.

    L'altra alternativa è dimenticare gli array ed usare una collezione.

    ArrayList<List<Double>> lista = new ArrayList<List<Double>> ();

    lista.add (new ArrayList<Double> ());

    In questo caso non hai né errori né warning.
    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.