Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-10-2007, 09:26   #1
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
[JAVA] Capire alcuni punti del JLS

Sto leggendo il JLS (Java Language Specification) e ci sono dei punti nella sezione §5.5 Casting Conversion che non capisco. So che sono cose molto particolari e specifiche ma se qualcuno è in grado di spiegarle, ringrazio in anticipo.

Ad un certo punto dice:

A cast from a type S to a parameterized type (§4.5) T is unchecked unless at least one of the following conditions hold:
* S <: T.
* All of the type arguments (§4.5.1) of T are unbounded wildcards.
* T <: S and S has no subtype X≠T , such that the erasures (§4.6) of X and T are the same.
I primi due punti mi sono molto chiari, il terzo (evidenziato in rosso) no.

In pratica dice che il cast non è unchecked se la condizione è che: T è un sottotipo di S (quindi è un down-cast) e S non ha un sottotipo X diverso da T tale che le erasure di X e T sono le stesse. Cioè??

Solo con la prima parte (T <: S) un esempio sarebbe facile da fare:
Codice:
class Super { }
class Sub<T> extends Super { }

Super sup = new Sub<String> ();
Sub<String> sub = (Sub<String>) sup;
Qui Super è S e Sub<String> è T ma il cast è unchecked. E in quale condizione non sarebbe unchecked?? Un esempio?


---------------------------
Altro punto, sempre in §5.5 un po' più sotto:

The detailed rules for compile-time legality of a casting conversion of a value of compile-time reference type S to a compile-time reference type T are as follows:

* If S is a class type:
* If T is a class type, then either |S| <: |T|, or |T| <: |S|; otherwise a compile-time error occurs. Furthermore, if there exists a supertype X of T, and a supertype Y of S, such that both X and Y are provably distinct parameterized types (§4.5), and that the erasures of X and Y are the same, a compile-time error occurs.

Anche qui la prima parte mi è chiara, S e T devono essere in "linea di ereditarietà" (String e Integer ad esempio non lo sono). La parte successiva (evidenziata in rosso) no, non mi è chiara. Anche qui un esempio sarebbe utile.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 04-10-2007, 18:11   #2
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Per il primo punto io capisco:
S non ha un sottotipo con la stessa erasure di T, esempio:
Set<String> e Set<Integer> sono tipi diversi, ma con uguale erasure (Set),
e se S è ad es. Object il cast sarà unchecked, perche' Object ha come
sottotipi
tutti i Set di tutti gli oggetti.
Se invece la conversione è "univoca" il cast è checked...

Prendi ad esempio il codice:
Codice:
	List<Integer> l = new ArrayList<Integer>();
	ArrayList<Integer> al = (ArrayList<Integer>) l;
Non dà warning perché List<Integer> è supertipo di ArrayList<Integer>, e non
ad esempio di ArrayList<String>, che avrebbe la stessa erasure...

In conclusione direi che se S è parametrico il cast è checked, altrimenti è unchecked.

Non ti so dire di piu', il mio cervello si ferma qui
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 04-10-2007, 18:38   #3
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Esempio per il secondo punto:
siano X = List<Integer> e Y = List<String> (tipi distinti, stessa erasure);
qualsiasi conversione tra un sottotipo di X e uno di Y fallisce.
Questo dice la frase in rosso.

Potrei aver detto un sacco di fregnacce, quindi non ti fidare troppo
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 04-10-2007, 19:52   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Intanto grazie per la risposta.

Quote:
Originariamente inviato da lovaz Guarda i messaggi
Non dà warning perché List<Integer> è supertipo di ArrayList<Integer>, e non
ad esempio di ArrayList<String>, che avrebbe la stessa erasure...

In conclusione direi che se S è parametrico il cast è checked, altrimenti è unchecked.
La questione secondo me è diversa. Il testo dice: "A cast from a type S to a parameterized type T .....". Quindi T è certamente parametrizzato mentre S no, perché questo punto parla del fatto che un cast da un S non parametrizzato a un T parametrizzato è sempre unchecked tranne (ed è qui che sbucano le eccezioni) uno dei tre casi elencati.

Tu invece hai fatto l'esempio di S e T entrambi parametrizzati, quindi è un'altra cosa, deduco io.


Quote:
Originariamente inviato da lovaz Guarda i messaggi
Esempio per il secondo punto:
siano X = List<Integer> e Y = List<String> (tipi distinti, stessa erasure);
qualsiasi conversione tra un sottotipo di X e uno di Y fallisce.
Questo dice la frase in rosso.
Ci devo ragionare un pochino ... non sono sicuro al 100% che sia quel caso (ma potrei anche sbagliarmi).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:31   #5
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da andbin Guarda i messaggi
... "A cast from a type S to a parameterized type T .....". Quindi T è certamente parametrizzato mentre S no...
... un cast da un S non parametrizzato...
S è un tipo, non dice esplicitamente "non parametrizzato", quindi potrebbe esserlo...
Come hai detto tu T è certamente parametrizzato, S no.

Naturalmente posso sbagliarmi, anche perché non si capisce perché
hanno usato quei giri di parole, ma l'unico caso che mi viene in mente è quello...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:53   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da lovaz Guarda i messaggi
S è un tipo, non dice esplicitamente "non parametrizzato", quindi potrebbe esserlo...
Come hai detto tu T è certamente parametrizzato, S no.
Non è per controbattere o sminuire la tua spiegazione ma io l'ho inteso diversamente.

Qui si parla di una "unchecked conversion", che per definizione (§5.1.9) è: "There is an unchecked conversion from the raw type (§4.8) G to any parameterized type of the form G<T1 ... Tn>"
Ci sono dei casi in cui appunto pur passando da un raw type a un parameterized type non è unchecked.

Un esempio del primo caso (S <: T) è:
Codice:
class StringList extends ArrayList<String> { }

ArrayList<String> t1 = new StringList ();   // non è unchecked
Un esempio del secondo caso (All of the type arguments of T are unbounded wildcards) è:
Codice:
ArrayList<?> t2 = new ArrayList ();   // non è unchecked
Come vedi sono entrambi da raw type a parameterized type ma non sono unchecked.

E poi c'è 'sto terzo caso ......
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 17:07   #7
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
In realtà questa (la prima che avevi postato, 3o paragrafo primo post)
è la definizione di cast unchecked, e non di unchecked conversion...
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
Proofpoint mette in sicurezza gli agenti...
Annunci falsi su Bakeca con dati veri di...
Attenzione alla truffa dell'assegno di A...
Addio al mito delle batterie a stato sol...
400 milioni e un obiettivo ambizioso: Re...
TCL 2026: la tecnologia SQD-Mini LED arr...
Gli aggiornamenti arriveranno, ma non si...
Monopattini elettrici: addio "Far W...
Mistral AI raccoglie 830 milioni di doll...
Hacker iraniani di Handala violano la Gm...
Chi è Eddie Dalton: il cantante d...
OVHcloud mette l'Italia al centro della ...
Zeekr 007 GT sold out in Cina, si passa ...
Hisense QLED 4K da 98'' e 85'' con 144Hz...
Reolink Solar Floodlight: la nuova video...
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: 16:29.


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