View Full Version : [Java] Oggetti fittizi
beppegrillo
15-06-2009, 23:00
Ho ad esempio un oggetto jcombobox contenente un vector<palline>,
ora in questa lista associata ad una pallina (ha unn nome), vorrei inserire un oggetto fittizio del tipo "tutte le palline" o "nessuna pallina".
Quale è il modo migliore per procedere?
Se considero questi ultimi due oggetti come palline fittizie, mi precludo la possibilità che esistano palline che si chiamino "tutte le palline" etc..
Spero sia chiaro il concetto al di là delle palline :D
Puoi usare due istanze uniche dal significato convenzionale, come in:
public class Pallina {
public static final Pallina NESSUNA = new Pallina();
public static final Pallina TUTTE = new Pallina();
...eccetera
}
Oppure potrei non aver capito una mazza ma, che diavolo, quando mai questo ha fermato qualcuno dal dire qualcosa! :D
Puoi usare due istanze uniche dal significato convenzionale, come in:
public class Pallina {
public static final Pallina NESSUNA = new Pallina();
public static final Pallina TUTTE = new Pallina();
...eccetera
}
Oppure potrei non aver capito una mazza ma, che diavolo, quando mai questo ha fermato qualcuno dal dire qualcosa! :D
:rotfl: :rotfl:
oddio mi hai fatto morire
beppegrillo
16-06-2009, 00:25
Pallina ha come attributi nome,rimbalzi, l'equals è stato sovrascritto basandosi sull'uguaglianza di questi due valori ed il tostring mi ritorna il nome.
Ora, volendo utilizzare le istanze uniche ed assegnandoci come nome rispettivamente "tutte le palline" e "nessuna pallina", se ho riscritto il metodo equals secondo quanto sopra, mi precludo dall'esistenza di una reale pallina a avente nome "tutte le palline" etc.
Non ti preoccupare PGI-Bis , ti è concesso dire qualsiasi castroneria possibile :D
Puoi creare due sottoclassi per ridefinire i comportamenti che una normale pallina avrebbe ma che NONE e ALL non possono avere in quanto valori speciali.
public class Pallina {
public static final Pallina NONE = new Pallina(null) {
public String getName() { return null; }
public int getRimbalzi() { return 0; }
public int hashCode() { return System.identityHashCode(this); }
public boolean equals(Object that) { return that instanceof Pallina && that == this; }
};
}
Qui NONE è l'istanza di una classe anonima che estende Pallina. RI-RI-definendo equals e hashCode non precludi la possibilità che esista una Pallina di nome x y o z perchè NONE risulterà sempre e solo uguale a sè stesso.
Ciò premesso, non è che a te interessa semplicemente mettere nelle casella combinata due stringhe "NESSUNO" e "TUTTO" per la selezione? Se così fosse allora puoi creare un ComboBoxModel che ha sempre e comunque due stringhe in testa, vale a dire per getElementAt(0) restituisce "NESSUNO" e per getElementAt(1) restituisce "TUTTI". Un po' come i filtri automatici in Access o Excel per intenderci. TUTTI e NESSUNO si dinstinguono dalla Pallina "TUTTO" e dalla Pallina "NESSUNO" per essere Stringhe e non palline. Nota che questo non impedisce di usare una List<Palline> per il modello della ComboBox. Quando l'utente seleziona un elemento di indice maggiore di 1 devi semplicemente ricordarti di togliere 1 prima di accedere all'elemento Pallina della lista.
beppegrillo
16-06-2009, 02:22
Già, hai fatto centro sulla finalità della cosa.
Effettivamente, la soluzione che proponi è semplice e pulita, e non faccio troppi giri con la classe.
Grazie mille ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.