Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [JAVA] Tipi generici <E>

    Ragazzi ho un problema con i tipi generici. In poche parole ho creato una classe che mi estrae delle porzioni di stringhe attaverso la stringtokenizer().
    Queste stringe vengono passate a un ArrayList<E>, e fin qua tutto bene....il problema avviene quando il file da cui voglio prendere i dati contiene degli INTERI. Ovviamente so che sto catturando delle stringhe ma anche forzandoli in questa maniera:
    codice:
    public boolean parse(){
    while(in.hasNextLine())
    			{
    				StringTokenizer token = new StringTokenizer(in.nextLine(),",. ");
    				while(token.hasMoreTokens())
    				{
    					E valore = (E)token.nextElement();
    					this.data.add(valore);
    				}
    			}
    }
    Questo metodo viene chiamato quando faccio:
    codice:
    FileExtractor<Integer> a = new FileExtractor<Integer>("C:\\Users\\user\\Desktop\|Numeri.txt);
    a.parse();
    Il risultato è che ottengo ancora stringhe...non riesco a forzarlo!!!.
    Pensavo che il tipo generico <Integer> che mettevo al momento della costruzione dell'oggetto fosse ricordato dal metodo al momento della castatura.
    Ovviamente la soluzione è creare 2 casi : uno che gestisce stringhe e uno gli interi pero' io volevo fare un metodo unico.
    Come posso fare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,318
    Il problema è che la conversione da String a Integer non è fattibile tramite cast perchè non è affatto un cast.

    String e Integer non sono tipi "compatibili" l'uno con l'altro, quindi qui i Generics non c'entrano nulla.

    La conversione da String a Integer è l'applicazione di una funzione... e si fa tramite Il metodo parseInt() della classe Integer (se proprio non te la vuoi riscrivere a mano).

    Dalla documentazione di StringTokenizer, poi, si capisce che nextElement() restituisce esattamente lo stesso oggetto di nextToken() solo che il metodo è forzato a restituire un Object anzichè propriamente uno String... ma quello che viene restituito è comunque uno String. Quel metodo è lì (con quella firma) solo perchè tale classe implementa l'interfaccia Enumeration.


    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

  3. #3
    E' vero che il nextElement restiusce un object ma si comporta come il nextToken e quindi restituisce sempre una stringa.
    Nella javadoc viene specificato che questo metodo è stato creato in modo che la StringTokenizer possa implementare Enum.
    "Na' sedia te vojo tirà!"

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.