Newsgroup: it.comp.java
Titolo: puntatori a funzioni in java

Salve a tutti.!
Venendo da un passato di programmazione in C++ mi trovo con la necessita'
(e la curiosita') di poter gestire dei puntatori a funzioni membro di una
classe. Il problema e' che non ho voglia di usare la reflection bensi'
imitare il sistema di puntatori a funzione come fanno nella gestione degli
eventi per le swing e le SWT. Mi servirebbe qualche (chiaro) esempio,
perche' non riesco a trovare nulla!! :(( 
Grazie a tutti!!!
Muzero
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 eventi per le swing e le SWT. 
Non esiste un sistema di "puntatore a funzione" in java. Se spieghi
meglio a cosa ti riferisci quando parli del sistema che vuoi imitare,
forse riesco a spiegarti come farlo.

 Foscolone wrote:


dunque, e' una cosa del genere: quando devo assegnare una funzione ad un
bottone, instanzio il bottone
-> Button button = new Button(shell, SWT.PUSH);
-> button.setText("Click Me");
dopodiche' definisco quale funzione devo assegnare all'evento 
-> button.addSelectionListener(esegui);
La funzione membro esegui e' un'implementazione di un'interfaccia 
SelectionListener esegui = new SelectionListener() {
      public void widgetSelected(SelectionEvent event) {
        System.out.println("hai premuto il bottone!");
      }
  });
mi piacerebbe molto ricreare lo stesso meccanismo per avere un insieme di
oggetti come SelectionListener da poter poi mettere dentro mappe o vettori
e gestirmeli come voglio (come facevo in c++). anche se poi dovrei vedere
come "dereferenziare" (passami il termine) queste funzioni...
grazie per l'attenzione! :)
Foscolone


 come "dereferenziare" (passami il termine) queste funzioni...
Leggi questo articolo di MokaByte:
http://www.mokabyte.it/2005/06/eventlistener.htm

Il problema comune a chi 'migra' dal C++ a Java (e ci sono passato
anche io) è quello di cercare di ricostruire in Java le stesse cose
che si fanno in C++...
In Java non esistono puntatori a funzione, ma esiste la reflection, che
è moooolto meglio...
IMHO se ti dimentichi dei meccanismi del C++ e cerchi di adattarti a
quello che ti offre Java farai molta meno fatica :)

 classe. 
Senza entrare nel merito del tuo problema che potrebbe anche avere soluzioni
migliori i puntatori a funzione posso essere implementati (sia in Java, sia
in C++) in modo molto elegante e soprattotto OO.
Immaginiamo una interfaccia:
public interface Funzione {
 void esegui();
}
Diciamo che volevi passare un puntatore a funzione ad un qualche metodo
perché la eseguissi. Passerai al metodo in questione un riferimento ad un
oggetto che implementa funzione.
Quindi ad esempio chiamando con molta fantasia f() tale funzione:
Funzione daPassare = new Funzione() {
        esegui() {
          implementazione
        }
};
f(daPassare);
da qualche parte sarà di chiarata una:
f(Funzione daEseguire) 
che ad un certo punto chiamerà
daEseguire.esegui().
Poi ovviamente nessuno ti obbliga a creare la classe che implementa Funzione
al volo o a metterci un metodo solo, ecc.
Spero di essere stato chiaro
Ciao
-- 
chi sono e soprattutto chi non sono:
http://www.softeaware.it

 writes:
B> In Java non esistono puntatori a funzione,
B> ma esiste la reflection, che č moooolto meglio...
Ne  sei sicuro  che usare  un oggetto  Method sia  meglio di  usare un
puntatore ?  Temo che compararne l'efficenza dia risultati deludenti.
Meglio usare le interfaccie.
-- 
 /\            ___
/___/\__|_|\_|__|___Gian Uberto Lauri_____________________
  //--\ | | \|  |   Integralista GNUslamico  
\/		    e coltivatore diretto di software

GRAZIE a TUTTI per le risposte mi siete stati di grande aiuto!!!!! :)
Foscolone
