Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-06-2007, 09:55   #1
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
[java] strutture generiche

Treemap<Object,Object> è equivalente alla struttura Treemap senza l' utilizzo dei generici oppure se nella prima si tenta l' inserimento di una sottoclasse di Object si crea un errore?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2007, 10:17   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Treemap<Object,Object> è equivalente alla struttura Treemap senza l' utilizzo dei generici oppure se nella prima si tenta l' inserimento di una sottoclasse di Object si crea un errore?
TreeMap<Object,Object> è la versione "generica" del raw type TreeMap usato nelle versioni di Java pre-generics. E la cosa vale ovviamente anche per le altre collezioni.

In un TreeMap<Object,Object> puoi inserire chiavi e valori di qualunque sottotipo di Object (infatti ... sono comunque degli Object).
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet

Ultima modifica di andbin : 22-06-2007 alle 11:10.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 10:48   #3
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da andbin Guarda i messaggi
TreeMap<Object,Object> è la versione "generica" del raw type TreeMap usato nelle versioni di Java pre-generics. E la cosa vale ovviamente anche per le altre collezioni.

In un TreeMap<Object,Object> puoi inserire chiavi e valori di qualunque sottotipo di Object (infatti ... sono comunque degli Object).
quindi alla fine istanziare una struttura con parametro generico Object alla fi fne equivale ad istanziarla in maniera non generica?

Quando vado a utilizzare poi gli elementi sono obbligato a fare il cast?Mi spiego:

LinkedList<Object> lista=new LinkedLIst<Object>();
lista.addFirst(new MiaClasse());
MiaClasse mc=lista.removeFirst(); va bene oppure mi restituisce un tipo Object per cui devo fare
MiaClasse mc=(MiaClasse)lista.removeFirst()
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 23-06-2007, 14:33   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
quindi alla fine istanziare una struttura con parametro generico Object alla fi fne equivale ad istanziarla in maniera non generica?
Concettualmente sì. Però se stai usando un JDK 5 o superiore, se usi i raw type ti vengono segnalati degli "unchecked warning"

Codice:
import java.util.*;

class Prova
{
    public static void main (String[] args)
    {
        List list = new ArrayList ();
        list.add ("ciao");
    }
}
Codice:
Prova.java:8: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.List
        list.add ("ciao");
                 ^
1 warning
Il motivo è semplice: nel framework di Java le classi collection sono diventate generiche (da Java 5 in poi). La classe List è stata dichiarata come List<E> e il metodo add ad esempio è dichiarata come boolean add(E e)

Il compilatore sta solo avvertendo che l'utilizzo di un raw type è "unsafe", insicuro. Perché il compilatore non può più controllare (come invece potrebbe fare usando i generics) che la classe sia usata in modo type safe.

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Quando vado a utilizzare poi gli elementi sono obbligato a fare il cast?Mi spiego:

LinkedList<Object> lista=new LinkedLIst<Object>();
lista.addFirst(new MiaClasse());
MiaClasse mc=lista.removeFirst(); va bene oppure mi restituisce un tipo Object per cui devo fare
MiaClasse mc=(MiaClasse)lista.removeFirst()
Se usi i generics no, non è necessario fare dei cast.

Codice:
List<String> list = new ArrayList<String> ();
list.add ("ciao");

String s = list.get (0);   // niente cast
Una cosa molto importante è questa: se non ci sono degli unchecked warning, l'utilizzo dei generics è completamente type safe, quindi anche i cast inseriti in automatico dal compilatore non falliscono mai.
Se invece ci sono degli unchecked warning, allora non si può essere più sicuri. È possibile che ci siano dei problemi a tempo di esecuzione in altre parti di codice che magari non c'entrano nulla.

Meglio fare un esempio:
Codice:
import java.util.*;

class Prova
{
    public static void main (String[] args)
    {
        List<String> list = new ArrayList<String> ();
        list.add ("ciao");


        List l = list;
        l.add (new Integer (123));   // Linea A


        String s = list.get (1);    // Linea B
    }
}
Il compilatore segnala un unchecked warning alla linea A. In pratica ti dice solo: guarda che non so se quello che stai facendo è sicuro. Ma in effetti lo fa a runtime senza problemi.
Il problema sbuca alla linea B, che causa una eccezione ClassCastException.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 01:17   #5
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
ho provato a compilare l' ultima classe da te postata e guarda che strano log esce:
Codice:
 
C:\Users\A\Documents\Prova11.java:7: type List does not take parameters
        List<String> list = new ArrayList<String> ();
            ^
C:\Users\A\Documents\Prova11.java:12: cannot find symbol
symbol  : method add(java.lang.Integer)
location: class List
        l.add (new Integer (123));   // Linea A
         ^
.\List.java:4: unexpected type
found   : int
required: reference
LinkedList<int> lista=new LinkedList<int>();
           ^
.\List.java:4: unexpected type
found   : int
required: reference
LinkedList<int> lista=new LinkedList<int>();
                                     ^
4 errors

Procedura completata con codice di uscita 1
eppure List è un' interfaccia e LinkedList la implementa per cui l' assegnamento è corretto..
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 10:22   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
ho provato a compilare l' ultima classe da te postata e guarda che strano log esce:
Codice:
 
C:\Users\A\Documents\Prova11.java:7: type List does not take parameters
        List<String> list = new ArrayList<String> ();
            ^
C:\Users\A\Documents\Prova11.java:12: cannot find symbol
symbol  : method add(java.lang.Integer)
location: class List
        l.add (new Integer (123));   // Linea A
         ^
Ahhh .... che strana cosa! Che compilatore Java usi?

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Codice:
.\List.java:4: unexpected type
found   : int
required: reference
LinkedList<int> lista=new LinkedList<int>();
           ^
.\List.java:4: unexpected type
found   : int
required: reference
LinkedList<int> lista=new LinkedList<int>();
                                     ^
4 errors

Procedura completata con codice di uscita 1
Qui ti dice che ha trovato int ma richiede un reference. I tipi parametrici dei generics possono essere solo ed esclusivamente dei reference, mai dei tipi primitivi.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 11:37   #7
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
solitamente per i progetti utilizzo Jbuilder oppure eclipse,ma per fare una cosa veloce ho compilato con textpad..
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 11:40   #8
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
javac -version
che dice?
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 12:34   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il compilatore dice che il tuo List non accetta parametri. Significa che sa cosa sia un parametro quindi dev'essere 1.5+

Ci sono due "List" nelle API standard. L'interfaccia java.util.List, che è generica, e la classe java.awt.List, che non lo è.

Prova ad usare il nome pienamente qualificato java.util.List.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 13:53   #10
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da lovaz Guarda i messaggi
javac -version
che dice?
1.6.0
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 13:56   #11
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Il compilatore dice che il tuo List non accetta parametri. Significa che sa cosa sia un parametro quindi dev'essere 1.5+

Ci sono due "List" nelle API standard. L'interfaccia java.util.List, che è generica, e la classe java.awt.List, che non lo è.

Prova ad usare il nome pienamente qualificato java.util.List.
è importato solo java.util per cui nn puo esserci conflitto.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 14:04   #12
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Allora cerca il numero dell'esorcista sulle pagine gialle perchè il tuo PC è posseduto dal demonio .
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 17:36   #13
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
ho fatto diversi progetti,anche simulazioni web-service e non ha mai dato problemi sia con i generici che con le interfacce.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 18:35   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Prova a stampare sulla console il tipo di quel "List":

System.out.println(List.class);

subito prima della linea incriminata. Ho provato a compilare questa classe:

Codice:
public class Main {
	private java.awt.List<String> lista = new java.util.ArrayList<String>();
}
e il compilatore (1.6.0_01) mi da lo stesso messaggio:

Codice:
Main.java:2: type java.awt.List does not take parameters
        private java.awt.List<String> lista = new java.util.ArrayList<String>();
Naturalmente ti credo quando dici che hai incluso il package java.util e quindi quel List non è java.awt.List. Il problema dev'essere da qualche altra parte. Comunque prova a usare il nome pienamente qualificato per List:

java.util.List<String>

e vedi cosa ti dice.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 24-06-2007, 18:38   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Un'improbabilità che m'è venuta in mente: per caso hai un'ide che crea anche applicazioni Java ME? Perchè usando come librerie "bootstrap" per il compilatore javac quelle di Java ME allora avremmo un java.util.List non generico.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2007, 21:33   #16
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
compilando con eclipse funziona tutto ok.

Un' altra domanda però non riesco ad eseguire da riga di comando il -Xlin per verificare i warning.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
BYD sfida Tesla con un piano da 2 miliar...
La corsa ai datacenter passa dalla stamp...
La Tangenziale di Napoli è la pri...
Steam Machine potrebbe essere dietro l'a...
Come l'Edge AI sta ridefinendo l'operati...
macOS 27 Golden Gate manda in crisi Asah...
Il Messico lancia il primo EV nazionale:...
Via libera in 17 Paesi europei alle sper...
Apple aggiorna le regole dell'App Store:...
I dipendenti Amazon non ci stanno: basta...
EssilorLuxottica produrrà occhial...
Al Museo Diocesano Carlo Maria Martini d...
AMD non teme NVIDIA: nei suoi test EPYC ...
I Mondiali 2026 saranno sorvegliati da c...
Stop agli sprechi di tempo: LLM Checker ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v