|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
[JAVA]Oggetto visibile a tutti
C'è un modo per creare un oggetto che è fisibile a tutte le classi?
Ho tante classi le quali hanno in comune un oggetto, ma non solo come tipo, cioè non hanno bisogno tutte di un "tipo" di oggetto, ma proprio dello stesso oggetto! Quindi dovrei passarlo a tutte le classi attraverso il costruttore o con qualche metodo, ma diventerebbe lungo e incasina il codice secondo me, quindi mi chiedevo se non ci fosse un metodo per istanziare un oggetto visibile ad alcune classi. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Intendi fare una cosa del genere?
Codice:
public class OggettoGlobale{ static int val; public static vois setVal(int x){ val=x; } public static int getVal(){ return val; } } |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Visto che hai parlato di condividere degli oggetti, io però pensavo a una cosa del tipo: Codice:
public class OggettiGlobali { public static MioOggetto1 ogg1; public static MioOggetto2 ogg2; .... private OggettiGlobali () { } // classe non istanziabile }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 545
|
Che ne dici di questo?
Codice:
public MyClass { private MyClass instance; private MyClass() {} public MyClass getInstance() { if (instance == null) instance = new MyClass(); return instance; } }
__________________
Linux Registered User Linux Registered Machine |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Da usare come?
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Potrebbe anche andargli bene .. dipende da cosa, quella classe "in comune", deve fare. EDIT: tra l'altro me ne sono accorto adesso ... il metodo getInstance deve essere static!!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 31-07-2006 alle 13:10. |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
public class OggettoComune { private static OggettoComune instance; private OggettoComune () {} public static OggettoComune getInstance() { if (instance == null) instance = new OggettoComune (); return instance; } } Codice:
OggettoComune oc = OggettoComune.getInstance(); ... EDIT: instance deve essere static!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 31-07-2006 alle 13:40. |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Perfetto mi piace molto come cosa!
Grazie ragazzi |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
be ma l'istanza di OggettoComune deve essere anche static...
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Grazie della segnalazione!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Mar 2003
Messaggi: 545
|
ops gli static
![]()
__________________
Linux Registered User Linux Registered Machine |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Si e poi devi gestire la sincronizzazione se hai intenzione di usarla in ambiente multithread.
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Come alternativa, in ambiente multithread, puoi evitare la sincronizzazione del metodo getInstance(), inizializzando il campo statico durante il caricamento della classe. La specifica del linguaggio garantisce che la classe viene caricata una sola volta e quindi esiste un solo oggetto comune.
Codice:
public class OggettoComune { private static OggettoComune instance = new OggettoComune(); private OggettoComune () {} public static OggettoComune getInstance() { return instance; } } Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Classico esempio di variabile globale...imho non è molto bello per la programmazione OO... il pattern Singleton è poi sconsigliato anche da Gamma & Co.
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
La creazione e l'assegnazione degli oggetti (tramite costruttore o metodi setXxxx) viene automatizzata usando dei framework tipo: http://jakarta.apache.org/hivemind/ http://www.springframework.org/ Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Quote:
Concordo che purtroppo la maggior parte delle volte viene usato come "variabile globale" e questo causa problemi, diventando una dipendenza aggiuntiva "nascosta" che rende piu' complesso fare test sulle classi che la usano. Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:30.