Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-01-2015, 16:33   #1
vittorio130881
 
Messaggi: n/a
java domanda semplice sui generics

ciao a tutti
sul libro che sto studiando per i parametri covarianti dei generics fa questo esempio

Codice:
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ma non sarebbe piu chiaro e giusto scrivere cosi?
Codice:
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro<Erbivoro> implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<Erba> implements Cibo, Animale<Erba> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ovvero mettere Erbivoro come tipo della classe carnivoro (o implementando Animale lo eredita??)
e se tanto alla fine erba non ha sottoclassi e carnivoro mangia solo erbivoro mettere direttamente Erba e non E extends erba?


Seconda domanda se potete e volete....
List<String> nomiList = new ArrayList<String>(Arrays.asList(nomi));

dove nomi è un array di stringhe banalissimo con marco paolo e giovanni.....
mi chiedo.........ma dove dico ad Arrays di accettare solo stringhe? dove sta la dichiarazione?
ad esempio nomiList dichiaro che lavora solo con stringhe...e Arrays?

Ultima modifica di vittorio130881 : 05-01-2015 alle 16:55. Motivo: fine2
  Rispondi citando il messaggio o parte di esso
Old 05-01-2015, 18:09   #2
Roran
Senior Member
 
L'Avatar di Roran
 
Iscritto dal: Aug 2006
Messaggi: 1730
Quote:
Originariamente inviato da vittorio130881 Guarda i messaggi
ciao a tutti
sul libro che sto studiando per i parametri covarianti dei generics fa questo esempio

Codice:
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ma non sarebbe piu chiaro e giusto scrivere cosi?
Codice:
interface Animale<C extends Cibo> {
void mangia(C cibo);
}
public class Carnivoro<Erbivoro> implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<Erba> implements Cibo, Animale<Erba> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
}
}
ovvero mettere Erbivoro come tipo della classe carnivoro (o implementando Animale lo eredita??)
e se tanto alla fine erba non ha sottoclassi e carnivoro mangia solo erbivoro mettere direttamente Erba e non E extends erba?


Seconda domanda se potete e volete....
List<String> nomiList = new ArrayList<String>(Arrays.asList(nomi));

dove nomi è un array di stringhe banalissimo con marco paolo e giovanni.....
mi chiedo.........ma dove dico ad Arrays di accettare solo stringhe? dove sta la dichiarazione?
ad esempio nomiList dichiaro che lavora solo con stringhe...e Arrays?
Riguardo la prima domanda, il tipo puoi specificarlo sull'interfaccia Animale perchè li c'è un generics C che estende Cibo, mentre le classi Carnivoro ed Erbivoro le stai scrivendo da zero, non le stai parametrizzando.

Riguardo la seconda domanda, non ho mai visto inizializzare una lista passando Arrays.asList(nomeArray) come parametro al costruttore, ma bensì ho sempre visto e utilizzato soltanto o List<String> nomiList = new ArrayList<String>() per poi utilizzare i metodi add e addall per aggiungere le stringhe singole o da un array, oppure List<String> nomiList = Arrays.asList(nomi) , e in questo caso asList prende come paramento T... nomi, dove T è lo stesso generics che utlizzi per parametrizzare List.
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb  MBA M3 13" 16/512 GB  AW 7  iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
Roran è offline   Rispondi citando il messaggio o parte di esso
Old 05-01-2015, 19:26   #3
vittorio130881
 
Messaggi: n/a
La seconda ok..... la prima me la rispiegheresti in altre parole per piacere ??????? Grazie mille per l'aiuto
  Rispondi citando il messaggio o parte di esso
Old 05-01-2015, 19:34   #4
vittorio130881
 
Messaggi: n/a
in pratica non ho capito se sono necessarie le cose scritte in rosso visto che le implementa da animale....

Codice:
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
e perchè solo nel secondo caso è necessarioil rosso e quindi perchè non nella classe Carnivoro??

Ultima modifica di vittorio130881 : 05-01-2015 alle 19:52. Motivo: c
  Rispondi citando il messaggio o parte di esso
Old 05-01-2015, 20:01   #5
Roran
Senior Member
 
L'Avatar di Roran
 
Iscritto dal: Aug 2006
Messaggi: 1730
Quote:
Originariamente inviato da vittorio130881 Guarda i messaggi
in pratica non ho capito se sono necessarie le cose scritte in rosso visto che le implementa da animale....

Codice:
public class Carnivoro implements Animale<Erbivoro> { public void mangia(Erbivoro erbivoro) { //un carnivoro potrebbe mangiare erbivori } } 
public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { public void mangia(E erba) { //un erbivoro mangia erba } public String getColore() { . . .
e perchè solo nel secondo caso è necessarioil rosso e quindi perchè non nella classe Carnivoro??
Sono due casi differenti, nel primo parametrizzi solo l'interfaccia, e già gli stai dicendo con che tipo parametrizzare l'interfaccia, nell'altro caso parametrizzi la classe Erbivoro e a sua volta anche l'interfaccia Animale con un tipo che sceglierai al momento in cui stai per istanziare un oggetto di quella classe. Non è necessario, dipende l'uso che ne devi fare.
__________________
i5-9400F + Zalman CNPS 8X Optima|Asus Prime B365M-A|Corsair Vengeance LP 2x8GB DDR4 2666Mhz|Sapphire Radeon RX 580 Pulse Ed. 4GB|Samsung 970 Evo Plus 250GB + OCZ Trion 100 (120GB) + Seagate Barracuda (1.5 TB)|Corsair TX650M|LG 27UD59 27" UHD|Windows 10 Pro| iPhone 17 Pro 256 Gb  MBA M3 13" 16/512 GB  AW 7  iPad Air 5 | 14 Trattative concluse sul forum, ultime 5 con: robby66,Darius_84,Konrad86,Dolphin69,dream83
Roran è offline   Rispondi citando il messaggio o parte di esso
Old 05-01-2015, 20:03   #6
vittorio130881
 
Messaggi: n/a
grazie
  Rispondi citando il messaggio o parte di esso
 Rispondi


AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Smart TV QLED da 75 pollici a 559€ su Am...
Nello Spazio l'evoluzione cambia rotta: ...
Il fondatore di Waymo critica l'FSD di T...
Rincari GPU: NVIDIA alza il costo della ...
Robot tagliaerba a 699€ su Amazon: un Se...
Nova Launcher cambia proprietà: perché t...
Stop a TikTok e Instagram dopo le 21: pa...
A Seul in arrivo nuovi incentivi per aut...
7 offerte nuove di zecca Amazon, altre a...
Una giornata di lavoro con l'IA consuma ...
'Non fate usare ChatGPT ai vostri cari':...
Un display che si allunga fino al 200% s...
X rende open source il suo algoritmo: si...
Ryanair si prepara a un'estate da record...
Robot aspirapolvere da 199€ su Amazon: D...
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: 13:10.


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