Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Parametrizzare HashTable

    Utilizzando la jvm 1.6 sono costretto ad utilizzare i generics.
    Come si fa a trasformare questo pezzo di codice con i generics?

    codice:
    public static Vector getRoots() throws SQLException {
            Vector ret = new Vector();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM DIR WHERE PARENT=0 ORDER BY LCASE(NAME)");
            while (resultSet.next()) {
                Hashtable hashtable = new Hashtable();
                hashtable.put("key", resultSet.getString("key"));
                hashtable.put("parent", resultSet.getString("parent"));
                hashtable.put("name", resultSet.getString("name"));
                hashtable.put("path", resultSet.getString("path"));
                ret.add(hashtable);
            }
            return ret;
    Ho provato varie volte ma non riesco.
    Vector dovrebbe risolversi cosi:
    Vector<String> vector = new Vector<String>();

    non riesco a sistemare l'hashtable...

    Grazie

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

    Re: Parametrizzare HashTable

    Originariamente inviato da mauroxxx83
    Utilizzando la jvm 1.6 sono costretto ad utilizzare i generics.
    Ovviamente no, non sei "obbligato". Se compili per Java 5 o superiore e usi delle collezioni senza usare i generics, ti verranno però segnalati dei warning su certi metodi (ad esempio il put() di Hashtable e il add() di Vector).

    Originariamente inviato da mauroxxx83
    Come si fa a trasformare questo pezzo di codice con i generics?
    Così:

    codice:
    public static Vector<Hashtable<String,String>> getRoots() throws SQLException {
            Vector<Hashtable<String,String>> ret = new Vector<Hashtable<String,String>>();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM DIR WHERE PARENT=0 ORDER BY LCASE(NAME)");
            while (resultSet.next()) {
                Hashtable<String,String> hashtable = new Hashtable<String,String>();
                hashtable.put("key", resultSet.getString("key"));
                hashtable.put("parent", resultSet.getString("parent"));
                hashtable.put("name", resultSet.getString("name"));
                hashtable.put("path", resultSet.getString("path"));
                ret.add(hashtable);
            }
            return ret;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ti ringrazio per avermi risposto velocemente ed in maniera esaustiva,


    Ho provato a modificare quest'altro pezzo di codice con i generics ma senza successo.

    codice:
    public static Hashtable getPlaylists() throws SQLException {
            Hashtable ret = new Hashtable();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM PLAYLIST ORDER BY KEY");
            while (resultSet.next()) {
                ret.put(resultSet.getString("name"), resultSet.getString("key"));
            }
            return ret;
        }

    Dato che hashtable richiede 2parametri per cui ho provato a fare
    hashtable<String,String> ret = new hashtable<String,String>(); ma mi da errore.
    Dove sbaglio?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauroxxx83
    Ho provato a modificare quest'altro pezzo di codice con i generics ma senza successo.
    Così:
    codice:
    public static Hashtable<String,String> getPlaylists() throws SQLException {
            Hashtable<String,String> ret = new Hashtable<String,String>();
            ResultSet resultSet = stat.executeQuery("SELECT * FROM PLAYLIST ORDER BY KEY");
            while (resultSet.next()) {
                ret.put(resultSet.getString("name"), resultSet.getString("key"));
            }
            return ret;
        }
    P.S.: Nel primo codice, vedi bene che il Vector l'ho fatto diventare: Vector<Hashtable<String,String>>
    Se lo trovi scomodo o noioso, puoi definire una classe che estende quel tipo:

    public class StringsHashVector extends Vector<Hashtable<String,String>> { }

    anche senza nulla nel corpo (come minimo c'è il costruttore di default).

    E quindi il tuo precedente codice diventa:

    codice:
    public static StringsHashVector getRoots() throws SQLException {
            StringsHashVector ret = new StringsHashVector();
    .....
    Più comodo, no?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    @mauroxxx83: i tag [CODE] e [/CODE] sono stati inseriti proprio per poter postare del codice... usali al posto dei tag per il grassetto. Nella pagina di scrittura del post puoi utilizzare il pulsantino (#) per visualizzarli, oppure li scrivi a mano.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6

    P.S.: Nel primo codice, vedi bene che il Vector l'ho fatto diventare: Vector<Hashtable<String,String>>
    Se lo trovi scomodo o noioso, puoi definire una classe che estende quel tipo:

    public class StringsHashVector extends Vector<Hashtable<String,String>> { }

    anche senza nulla nel corpo (come minimo c'è il costruttore di default).

    E quindi il tuo precedente codice diventa:

    codice:
    public static StringsHashVector getRoots() throws SQLException {
            StringsHashVector ret = new StringsHashVector();
    .....
    Più comodo, no?
    decisamente si! grazie!

  7. #7
    Originariamente inviato da LeleFT
    @mauroxxx83: i tag [CODE] e [/CODE] sono stati inseriti proprio per poter postare del codice... usali al posto dei tag per il grassetto. Nella pagina di scrittura del post puoi utilizzare il pulsantino (#) per visualizzarli, oppure li scrivi a mano.


    Ciao.
    scusa per l'imprecisione! ciao

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.