Jak wszyscy wiecie, możliwe jest pobranie metody z Reflection
i wywołanie jej za pomocą zwróconej instancji Method
.Czy wykonanie metody pobranej przez odbicie trwa dłużej?
Moje pytanie jest jednak; po pobraniu przez Reflection
i raz wywołać Method
będzie wydajność metody będzie wolniejsza niż normalny sposób wywoływania metody?
Na przykład:
import java.lang.reflect.Method;
public class ReflectionTest {
private static Method test;
public ReflectionTest() throws Exception {
test = this.getClass().getMethod("testMethod", null);
}
public void testMethod() {
//execute code here
}
public static void main(String[] args) throws Exception {
ReflectionTest rt = new ReflectionTest();
for (int i = 0; i < 1000; i++) {
rt.test.invoke(null, null);
}
for (int i = 0; i < 1000; i++) {
rt.testMethod();
}
}
}
Pytam tego powodu Robię układ zdarzeń, które w momencie rejestracji słuchacza skanuje adnotacji. Metody są umieszczane na mapie, a następnie wykonywane za każdym razem, gdy wystąpi zdarzenie o wymaganym typie parametru. Nie wiem, czy jest wystarczająco wydajna, na przykład w grze.
może nie na egzekucji, być może w trakcie pobierania? – DnR
Sądzę, że jeśli będę uważał z ilością pobrań, które robię, to nie powinno to mieć zbyt dużego wpływu na wydajność? – Limnic
pozwala czekać na odpowiedź pro: D – DnR