Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    [Java] <E>, <T>, <K>... che robe sono?

    Ciao a tutti. Oggi mi sono scontrato con una delle novità che Java ha messo a disposizione (cose che credo potessero risparmiarsi, dato che ora tutte le mia applicazioni perfettamente legali per JDK 1.4.2 non sono più compilabili in modo pulito per JDK 1.5.0).

    Sono entrato nel sito della Sun, nella documentazione dopo che mi è apparso un misteriosissimo messaggio di Worning in fase di compilazione:
    «[unchecked] unchecked call to add(E) as a member of the raw type java.util.Vector»
    VVoVe: (mistero assoluto... che vorrà mai dire questa cosa??)

    Andiamo avanti... entro nella documentazione della classe Vector (che fino alla versione 1.4.2 era un bellissima classe, semplicissima da usare, senza tanti problemi) e mi trovo qualcosa di orribile di fronte:
    codice:
    Class Vector<E>
    
    java.lang.Object
     |
     +- java.util.AbstractCollection<E>
     |
     +--- java.util.AbstractList<E>
     |
     +------ java.util.Vector<E>
    Altro mistero... che roba è quella <E> che fa tanto pensare ai template del C++?? Mah...

    Ma la cosa non finisce qui: vado a vedere quei metodi che pensavo di conoscere a memoria... e, sorpresa delle sorprese, tutto cambiato! Ora il metodo add() non riceve più un paramtero di tipo Object (come sarebbe lecito aspettarsi, dopo anni di utilizzo di questa classe), ma accetta un argomento di un tipo non ben definito: la misteriosissima classe E. Ok, mi dico... non scoraggiamoci, clicchiamo su questo link alla classe E e guardiamocela, dopo tutto, che sarà mai... Eppure anche qui una brutta sorpresa: il link riapre la classe Vector. Domanda: è ricorsiva? Mi devo preoccupare? E' una proprietà estensionale non banale? Devo ricorrere al teorema di Rice per comprenderla?

    Così, sconsolato, mi metto alla ricerca dei tutorial... chissà mai che ti spieghino cosa voglia dire: altra brutta sorpresa... i tutorial si riferiscono ancora alla "vecchia" 1.4.2!

    Io sono disperato: DEVO programmare, DEVO far funzionare questi benedetti programmi, senza dover riscrivere tutto il codice e senza (possibilmente) implementarmi una benedettissima classe Vector a modo mio (cosa che non sarebbe complessa, ma che vorrei evitare per non perdere troppo tempo).

    Qualcuno mi illumina su queste (passatemi il termine) schifezze che la Sun si è sentita in dovere di aggiungere (e modificare qua e là)?

    Grazie anticipatamente (e scusate il piccolo sfogo).


    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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    uppete!
    "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
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Ciao Lele; forse ti dirò una cavolata perché l'1.5 non l'ho mai utilizzata; però ho letto delle Collection; precisamente del fatto che esse non sono + generiche ma tipizzate... forse quella <E> si riferisce proprio a ciò; infatti mi sembra che ora si possa scrivere:

    codice:
    Vector<Integer> v = new Vector();
    o qualcosa del genere; ebbene, visto che così si è dichiarato alla VM che sio vuole creare un Vector di Integer i fighi della Sun avranno pensato.. che ce ne facciamo del vecchio add(Object o)? Tanto sappiamo che oggetti ci sono quì dentro ed ecco l'add(<E>); penso (e spero perché altrimenti chissa' che hanno pensato ) sia questo il ragionamento che hanno fatto.
    Spero di esserti stato di aiuto; ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sai... potresti avere ragione. Cercherò maggiori informazioni a riguardo. Se è così posso ancora utilizzare questo Vector nelle mie applicazioni, tanto, effettivamente, in un Vector si inseriscono quasi sempre gli stessi tipi di oggetto.

    In caso contrario, mi rassegnerò a ricostruire la vecchia Vector


    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

  5. #5
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Bene fammi sapere se è vero quello che ti ho detto; ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Dalle informazioni che ho trovato sul sito della Sun (certo che bisogna proprio avere occhio per trovarle queste informazioni...) sembra proprio che sia come dici tu. I nuovi Vector sono denominati "Typesafe" proprio perchè contengono oggetti tutti dello stesso tipo e, a quanto pare, i metodi di restituzione degli oggetti in esso contenuti dovrebbero forzare automaticamente il cast. Il solo problema è la sintassi che viene nettamente appesantita.

    Così, ora, è possibile fare qualcosa del genere
    codice:
    Vector<String> vettore = new Vector();
    vettore.add( new String("Ciao, che si dice") );
    System.out.println( vettore.elementAt(0).toUpperCase() );
    mentre prima si doveva forzare il cast
    codice:
    Vector vettore = new Vector();
    vettore.add( new String("Ciao, che si dice") );
    System.out.println( ((String) vettore.elementAt(0)).toUpperCase());
    Non ho ancora provato perchè in questo momento non ho una JDK 1.5.0, ma proverò al più presto!

    Ciao e grazie della dritta!
    "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

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Hanno imitato i template del C++, anche se mi pare solo limitativamente alle strutture dati che rappresentano contenitori (liste, vettori, ecc ecc), e probabilmente in modo più pulito rispetto al C++,


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Certo che da Java mi aspettavo un nome più pulito di <E>
    Verdrò di farmi chiarezza...

    E poi con le interfaccia non si sentiva il bisogno dei template!
    Potevano piuttosto inserire le strutture.. forse...

    Boh non linciatemi che non conosco bene questo linguaggio

  9. #9
    Salve a tutti
    Con la jdk1.5.0 hanno introdotto molte novità .
    Però questi tipi di strutture non sono ancora supportate da programmi come Eclipse , non so JBuilder ...
    Fino ad ora mi sarebbero state utili , ma non ho potuto utilizzarle , dato che uso principalmente Eclipse.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... io il codice lo scrivo a mano, ma purtroppo le mie applicazioni scritte e funzionanti con la 1.4.2 dovrò modificarle per poterle ricompilare con la 1.5.0.

    Prova a scrivere il codice a mano compilandolo da riga di comando, tanto se l'hai già installato il problema non sussiste.


    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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.