|
|
|
![]() |
|
Strumenti |
![]() |
#21 |
Messaggi: n/a
|
ecco questo....grazie!
|
![]() |
![]() |
#22 |
Messaggi: n/a
|
Errore scusate
Ultima modifica di vittorio130881 : 11-12-2014 alle 18:06. |
![]() |
![]() |
#23 |
Messaggi: n/a
|
Java domanda semplice
Scusate non riesco a scrivere da ipad
Ultima modifica di vittorio130881 : 11-12-2014 alle 18:52. |
![]() |
![]() |
#24 |
Messaggi: n/a
|
errore di scrittura
Ultima modifica di vittorio130881 : 11-12-2014 alle 20:58. |
![]() |
![]() |
#25 |
Messaggi: n/a
|
errore di scrittura
Ultima modifica di vittorio130881 : 11-12-2014 alle 20:58. |
![]() |
![]() |
#26 |
Messaggi: n/a
|
Codice:
public void print(List <? extends Number> list) { for (Iterator<? extends Number> i = list.iterator(); i.hasNext( ); ) { System.out.println(i.next()); } public static void riempiLista(List<? super Integer> list) { int size = list.size(); for (int i = 1; i <= size; i++) { list.add(i); } System.out.println(list); } Inviato dal mio iPad utilizzando Tapatalk |
![]() |
![]() |
#27 |
Messaggi: n/a
|
Domanda il testo dice sul tema generics queste cose
Partendo dal fatto che i parametri di un metodo possono essere di tre tipi: 1.parametro che contiene dati da usare (“IN” parameter): esempio del metodo print(); 2.parametro che deve essere aggiornato (“OUT” parameter): esempio riempilista usare upper bounded wildcard per parametri di tipo 1; usare lower bounded wildcard per parametri di tipo 2; Perché? sopra troverete l'esempio di upper bound e lower bound. non capisco perchè se devo usare/riempire una list devo usare super invece se devo leggerla/print extends. in particolare avevo letto che i wildcard rendevano di sola lettura i tipi parametrici e quindi come lo si fa a riempire nel riempiLista? grazieee Ultima modifica di vittorio130881 : 11-12-2014 alle 21:28. |
![]() |
![]() |
#28 |
Messaggi: n/a
|
Chiedo scusa ai moderatori e a tutti voi dei post duplicati....scusate
Ultima modifica di vittorio130881 : 11-12-2014 alle 21:02. |
![]() |
![]() |
#29 | |
Member
Iscritto dal: Apr 2008
Messaggi: 60
|
Quote:
provo a risponderti, ma non ho capito molto cosa intendi l'upper bounded wildcard cioè la wildcard limitata verso l'alto, significa che posso passare un parametro che è sottoclasse della classe dichiarata. nell'esempio : print(List <? extends Number> list), accetta solo tipi che sono sottoclassi di Number (Float, Integer, Double, Short) quindi posso usare un solo metodo per diverse Liste, senza necessariamente crearne una per ogni tipo. il lower bounded wildcard funziona al contrario. accetta le superclassi di quella dichiarata. nell'esempio che hai riportato, riempiLista(List<? super Integer> list) il parametro che passi deve essere una lista di Integer, oppure una superclasse di Integer, quindi Number..... però genera errore se passi una lista di Float. sinceramente ho sempre usato extends, mai super. se dovessi inizializzare una lista con un metodo (modifichiamo il tuo), lo farei in questo modo: Codice:
public static void riempiLista(List<? super Integer> list) { int size = 10; for (int i = 1; i <= size; i++) { list.add(i); } System.out.println(list); } //per chiamare il metodo List<Integer> li = new ArrayList<>(); riempiLista(li); anche questo modo, può essere usato per riempire liste di oggetto che sono superclassi di classi definite da te (non considerare Integer, ma pensa a Dipendente , sottoclasse di Persona) Codice:
public class Persona { public String nome; public Persona(String nome){ this.nome=nome; } } public class Dipendente extends Persona{ public String ruolo; public Dipendente(String nome, String ruolo){ super(nome); this.ruolo=ruolo; } public String toString(){ return nome+"-"+ruolo; } } public static void riempiLista(List<? super Dipendente> list) { int size = 10; for (int i = 1; i <= size; i++) { list.add(new Dipendente("pippo",""+i)); } System.out.println(list); } List<Persona> lp = new ArrayList<>(); riempiLista(lp); public static void riempiLista(List<Dipendente> list) il codice List<Persona> lp = new ArrayList<>(); riempiLista(lp); genera errore. comunque, aspettiamo qualche esperto, perché oltre a dirti la differenza tra upper e lower, non capisco il metodo riempiLista scritto in quel modo! una cosa però si puo dire. nel metodo riempiLista non ci puoi mettere: riempiLista(List<? extends Number> list) cosi scritta, il compilatore non riuscirebbe a capire che tipo verrà aggiunto e l'istruzione list.add(i) restituirà un errore. PS: ma che libro stai studiando? |
|
![]() |
![]() |
![]() |
#30 |
Messaggi: n/a
|
grazie a tagan! e grazie a tutti voi della pazienza
|
![]() |
![]() |
#31 |
Messaggi: n/a
|
domanda finale sui generics
mi potete dire se ho capito bene? i generics permettono di evitare i casting ovvero..... Codice:
ArrayList <Number> list = new ArrayList <Number>(); list.add(1); list.add(2.0F); list.add(2.0D); list.add(2L); Iterator<Number> i = list.iterator(); while(i.hasNext()) { Number n = i.next(); } invece quest altro codice Codice:
ArrayList list = new ArrayList(); list.add(1); list.add(false); list.add(‘c’); int intero = (Integer) list.elementAt(0); boolean booleano = (Boolean) list.elementAt(1); character c = (Character) list.elementAt(2); qualora usassi le wildcard cmq sia devo utilizzare uno stratagemma ovvero il metodo helper perchè il compilatore non capisce che sto usando una lista di stringhe : Codice:
public class WildCardTest { void test(List<?> list) { testHelper(list); } //Metodo helper private <T> void testHelper (List<T> list) { list.set(0, list.get(0)); } } List<String> param = getArrayListCompleto(); WildCardTest wct = new WildCardTest(); wct.test(param); |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:51.