PDA

View Full Version : [JAVA]Observer-Observable Design Pattern


Frank1962
05-04-2007, 15:03
Ho un piccola problema con l'utilizzo di questo pattern insieme alla formattazione delle date in java.... preso questo pezzo di codice:


public void update(Observable o, Object arg) {
SimpleDateFormat giorno = new SimpleDateFormat("dd/MM/yyyy");
/* una o più discussioni presenti in questo
* newsgroup sono state aggiornate */
Discussion d = (Discussion)o;
List<String> list = d.getDifferentDate();
System.out.println("---> 1ab");
for(String data : list) {
System.out.println("ciao");
String aux = giorno.format(data); <----
System.out.println("ciao2");
if(!differentdate.contains(aux));
differentdate.add(aux);
}
System.out.println("---> 2cd");
howarticles++;
System.out.println("###-->"+howarticles);
System.out.println("###-->"+differentdate.size());
modify();
}


mi trovo nell'assurda situazione in cui, quando un oggetto observable viene modificato e di conseguenza viene chiamato il metodo update dell'oggetto osservatore, il flusso di controllo al momento di arrivare alla riga di codice definita dalla feccia rossa "sparisce"!! ...nel senso che in console vedo una sfilza di "---> 1ab" ....come se andasse in loop il for! ....il problema è che in realtà il programma non va in loop (un solo thread e quindi un solo flusso di controllo) e cosa + strana, quando vado a togliere la stringa che mi parsa la data il flusso di controllo mi stampa correttamente anche la "---> 2cd" !
O siamo entrati nel campo della metafisica oppure sono io che non ho capito bene il concetto di flusso di controllo, thread, ecc.... :(

Frank1962
05-04-2007, 18:08
scoperto l'arcano .....anche se mi lascia assai perplesso:


for(String data : list) {
System.out.println("ciao");
String aux = giorno.format(data)

...chiamo il metodo format della classe Date passandogli un oggetto di tipo String invece che di tipo Date!! ...il bello è che compilando e avviando il programma non viene generato nessun errore, ne in fase di compilazione ne in fase di runtime!! ....dite che sia possibile che eclipse si sia dotato di AI e mi abbia ridirezionato il System.out.err in /dev/null (nonostante sia su windows) !!!? :D :D

Mixmar
05-04-2007, 22:52
SimpleDateFormat estende java.text.Format che ha un metodo


public final String format(Object obj)


penso proprio che tu abbia beccato quello...

Frank1962
06-04-2007, 09:24
si ma com'è possibile che dopo la chiamata di quel metodo format il flusso di controllo non passa all'altra riga di codice andandomi a stampare "ciao2"?

Mixmar
06-04-2007, 12:43
si ma com'è possibile che dopo la chiamata di quel metodo format il flusso di controllo non passa all'altra riga di codice andandomi a stampare "ciao2"?

Apparentemente, chiamando la "format" viene richiamata la stessa "update"... per questo motivo vedi un loop. In realtà è una sorta di "ricorsione infinita"... però senza sapere come è fatta la classe (il resto del codice), è difficile dire di più. :confused: