Chcę wywołać metodę main
, która jest statyczna. Dostałem obiekt typu Class
, ale nie jestem w stanie utworzyć wystąpienia tej klasy, a także nie można wywołać metody static
main
.Wywoływanie metody statycznej za pomocą refleksji
Odpowiedz
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
W przypadku metoda jest prywatne korzystanie getDeclaredMethod()
zamiast getMethod()
. I zadzwoń pod numer setAccessible(true)
na obiekcie metody.
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
Dlaczego nie używać getMethod z poprawną nazwą zamiast pętli przez wszystkie metody? – mjaggard
Czasami łatwiej jest zapętlić i znaleźć metodę po nazwie, niż użyć getMethod, ponieważ getMethod (lub getDeclaredMethod) wymaga dokładnego opracowania typów parametrów. To zależy od tego, czy wydajność mikro ma znaczenie - iteracja Java jest bardzo szybka, więc jeśli nie wywołasz tej metody miliony razy w jakiejś wewnętrznej pętli, iteracja będzie wystarczająco szybka. –
Również w bardziej realnej sytuacji prawdopodobnie znajdziesz tylko Metoda raz, nawet jeśli zamierzasz użyć refleksji, aby wywołać ją wiele razy. Tak więc dodatkowe koszty, gdy się go znajduje, są nieistotne. – RenniePet
fromthe Javadoc z Method.invoke():
Jeżeli sposób bazową jest statyczny, a następnie określono obj argumentu jest ignorowana. Może być pusty.
Co się dzieje, kiedy
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
- 1. Wywoływanie metod z opcjonalnymi parametrami za pomocą refleksji
- 2. Java - Uzyskaj odniesienie do klasy statycznej za pomocą refleksji
- 3. Wywoływanie oryginalnej metody za pomocą Moq
- 4. Tworzenie delegata za pomocą refleksji
- 5. Wywołanie tego [indeksu int] za pomocą refleksji
- 6. Uzyskaj wartość słownika za pomocą refleksji
- 7. Wywołanie metody statycznej za pomocą Method.invoke() dało mi NPE
- 8. Jak tworzyć obiekty za pomocą statycznej metody fabularnej?
- 9. Uzyskiwanie wartości ogólnego IDictionary za pomocą refleksji
- 10. Uzyskaj wskaźnik do wartości za pomocą refleksji
- 11. Odkrywanie typów pochodnych za pomocą refleksji
- 12. Uzyskiwanie dostępu do zmiennych statycznych klasy modelu za pomocą refleksji
- 13. wywoływanie metody przy zamykaniu konsoli
- 14. Przesłanianie metody w DLL przy użyciu refleksji
- 15. Jak uzyskać konkretny obiekt metody statycznej za pomocą interfejsu lustrzanego API?
- 16. Jak wywołać prywatną metodę statyczną za pomocą refleksji (Java)?
- 17. Dodawanie metody statycznej IronPython zakresie
- 18. Wywoływanie metody ResolveClientUrl w ramach statycznej metody WWW (ASPNet Web Forms)
- 19. Jak wywołać metody statycznej PowerShell
- 20. wywoływanie metody quit() z QApplication
- 21. Uzyskiwanie MethodInfo statycznej metody klasy statycznej
- 22. Wywoływanie metody na obiekcie
- 23. Metody rozszerzeń klasy statycznej?
- 24. kolejność wykonywania metody statycznej
- 25. Nie można użyć publicznej metody statycznej?
- 26. Uzyskiwanie wartości pól statycznych typu za pomocą refleksji
- 27. Dynamicznie tworzenie obiektu za pomocą refleksji, przykuty metody i lambda wyrażeń
- 28. Wywoływanie bazy danych Neo4j za pomocą Django
- 29. Wywoływanie funkcji powłoki za pomocą xargs
- 30. Lepszy sposób definiowania metody statycznej
Pokaż nam kod, proszę. –