in una classe Java ho una lista di stringhe
una volta inizializzata non cambia
io l'ho definita static e la inizializzo in un blocco static in modo che rimanga come lista di classe
è corretta come cosa?
grazie
in una classe Java ho una lista di stringhe
una volta inizializzata non cambia
io l'ho definita static e la inizializzo in un blocco static in modo che rimanga come lista di classe
è corretta come cosa?
grazie
Lista intendi array ... o implementazione di List?Originariamente inviato da MyBloodyV.
in una classe Java ho una lista di stringhe
una volta inizializzata non cambia
io l'ho definita static e la inizializzo in un blocco static in modo che rimanga come lista di classe
è corretta come cosa?
Se però pensavi di renderla anche non mutabile, le cose vanno diversamente. Un array anche se lo metti come campo static e final, il suo contenuto può cambiare (se final è il reference che non può cambiare!).
Anche il contenuto di un List può cambiare, a meno che lo "wrappi" (incapsuli ... rende meglio in italiano) in un List immutabile con unmodifiableList di Collections.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
no non tanto l'immutabilità (so che è il reference immutabile) ma il fatto che così viene istanziata solo una volta, mi pare più corretto che sia insomma una variabile di classe; mi sbaglio? ok forse è una piccolezzaOriginariamente inviato da andbin
Lista intendi array ... o implementazione di List?
Se però pensavi di renderla anche non mutabile, le cose vanno diversamente. Un array anche se lo metti come campo static e final, il suo contenuto può cambiare (se final è il reference che non può cambiare!).
Anche il contenuto di un List può cambiare, a meno che lo "wrappi" (incapsuli ... rende meglio in italiano) in un List immutabile con unmodifiableList di Collections.
è un List
grazie
Se non deve essere per ogni oggetto ma appunto "globale", è corretto, cioè di per sé non c'è nulla di male o sbagliato tecnicamente.Originariamente inviato da MyBloodyV.
no non tanto l'immutabilità (so che è il reference immutabile) ma il fatto che così viene istanziata solo una volta, mi pare più corretto che sia insomma una variabile di classe; mi sbaglio? ok forse è una piccolezza
è un List
Ed essendo "di classe" appunto lo puoi istanziare e riempire una volta sola.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ma sì, nel senso che i valori della lista devono essere gli stessi sempre, indipendentemente dal singolo oggettoOriginariamente inviato da andbin
Se non deve essere per ogni oggetto ma appunto "globale", è corretto.
Ed essendo "di classe" appunto lo puoi istanziare e riempire una volta sola.
grazie
Da quello che ho letto nel tuo primo messaggio e capito, mi sembra che tu hai fatto bene.Originariamente inviato da MyBloodyV.
ma sì, nel senso che i valori della lista devono essere gli stessi sempre, indipendentemente dal singolo oggetto
grazie
Se hai:
globale viene istanziato una sola volta e presenterà lo stesso contenuto per tutte le istanze della classe Ordine.codice:... public class Ordine{ private static List<Ordine> globale; static{ globale = new LinkedList<Ordine>(); } public Ordine(){ ... } ... }
Quindi ad esempio potrai sapere l'ordine corrente dove si va a posizionare rispetto a tutti gli altri ordini effettuati.
codice:public class Cucina{ private static List<Pentole> pentoleLista; static{ pentoleLista= new LinkedList<Pentole>(); } public Cucina(){ ... } ... }
Ripeto che è corretto.Originariamente inviato da MyBloodyV.
l'ho fatto perchè mi sembrava sbagliato istanziare una cosa più volte quando rimane sempre uguale; è corretto come rgaionamento?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
scusami l'esempio non è proprio analogo, mi son sbagliatoOriginariamente inviato da andbin
Ripeto che è corretto.
codice:public class Cucina{ private static List<Pentole> pentoleLista; static{ pentoleLista= new LinkedList<Pentole>(); } public Cucina(){ ... } ... }
ecco qualcosa di simile alla mia
Ma gli inserimenti nella lista ... dove li fai? Se li fai nello static init-block, allora ok, sono d'accordo ed è appropriato.Originariamente inviato da MyBloodyV.
codice:public class Cucina{ private static List<Pentole> pentoleLista; static{ pentoleLista= new LinkedList<Pentole>(); } public Cucina(){ ... } ... }
ecco qualcosa di simile alla mia
Se li fai nel costruttore di Cucina (o altro contesto "di istanza") .... non è detto.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet