delegat ? lub adres funkcji jak przesłać do innej funkcji.

0

Witam,

Może ktoś wie czy w javie są delegaty coś w stylu C# lub coś takiego jak wskaźnik do funkcji w c++ ?
Musze do obiektu przesłać adres funkcji która zostanie wywołana w podczas kliknięcia.

Z góry dzięki za wszelką informację.

0

Nie ma czegoś takiego. Możesz co najwyżej przesłać obiekt reprezentujący metodę za pomocą reflection API.

0

@koziolek: oj, oj. A callbacki za pomoca interfejsow? Przeciez tak sie to robi w Javie, np ActionListener.

@autor: a Javie robisz to tak ze tworzysz jakis wlasny interfejs, np Callable, z jakas metoda, i przekazujesz obiekty ktore ten interfejs implementuja. W funkcji ktora bierze taki parametr po prostu wolasz na nim metode ktora chcesz.

Fakt, wymaga to dodatkowego interfejsu, a moze nawet kilku jesli funkcje do wywolania maja rozne liczby parametrow (ale sa varargs jesli maja wspolny typ) (jesli maja rozne typy zwracane czy rozne typy parametrow mozna uzyc Generics, ale to staje sie niewygodne gdzy jest za duzo parametrow).

0

Tu chyba jednak chodziło o coś w stylu:


void my(void (*myFunction)(int, int)) {

//...

}

W przypadku interfejsu przekażesz co najwyżej obiekt, którego metodę wywołano.

0

Kolega spytal jak to zrobic w Javie, i tak sie to wlasnie robi w Javie. Kazdy jezyk ma swoje sposoby i to jest wlasnie ten Javowy. O wiele lepszy niz refleksja.

0

Ok, dzięki za info, czyli w javie brak delegatów, szkoda. Trzeba będzie skorzystać z interfejsu.

Pozdrawiam

0

Zamiast wskaźnika do funkcji możesz opakować jakoś klasę Method:
http://java.sun.com/javase/6/docs/api/java/lang/reflect/Method.html

Czyli właśnie skorzystać z refleksji jak napisał Koziołek. Zapewne tak są obsługiwane funkcje w Scali, choć to tylko domysły.

0

Nie zapominajcie ze aby mozna wywolac Method potrzeba 2 rzeczy: owego Method oraz obiekty na ktorym ma byc wywolana. Reflksja tez jest srednio czytelna i poreczna, debugowanie trudniejsze itp...

1 użytkowników online, w tym zalogowanych: 0, gości: 1