Przykład w C++.
class Klasa {
bool execute(sometype arg) {}
}
xxx = &Klasa::execute;
Czy zabawy z grupy std::bind
(przypomina mi się luabind i pythin bind)
using namespace luabind;
void greet()
{
std::cout << "hello world!\n";
}
...
open(L); // otwarcie silnika Lua, poza wątkiem
module(L)
[
def("greet", &greet)
];
A teraz Java, jednak NAJBLIŻSZE moim palcom jest użycie refleksji
xxx = Klasa.class.getMethod("execute", types)
By na xxx kiedyś zostało wykonanei Invoke(zzz)
Tak, wiem, po bożemu by było wprowadzać obiekty funkcyjne, strategie czy coś podobnego
class Klasa {
stastic class Executor {
bool execute (Klasa kl)
}
public final Executor = new Executor (this); // tu warning
}
Lub ten sam sens, napisany nowocześniej jako Function<T,R>
Kontekst:
wypuszczenie pewnych z tych czynności na interfejs użytkownika, np menu, i być może wykonanie tego za długi czas (nie natychmiast). Nudny program biznesowy, z wieloma, wieloma taki konstrukcjami , w tym po kilka eksportowanych metod w klasie
Dla ortodoksów, sprawa jest jeszcze gorsza. I tak bym machał refleksją, np w celu ewidencji adnotacji
czyli
class Klasa {
@Caption("Daj podwyżkę 100 zł")
bool execute (arg1, arg2)
}
xxx = Klasa.class.getMethod("execute", types)
yyy = xxx.getAnnotation(Caption.class);
w oczywistym celu, by ten string przekazać do UI
Wszystkie główne sposoby wychwyciłem?
Dlaczego jestem taki niedobry, upierając się na refleksję?
Kotlin daje lepsze w tym względzie możliwości, niedostepne w Javie ? (nie mam przekonania, że chiałbym zerwac kompatybilnośc z kimś dokładającym fragmenty kodu jednak w Javie, np wdrożeniowcem)