Chcę odkryć w czasie wykonywania TYLKO statyczne metody klasy, w jaki sposób mogę to zrobić? Albo, jak rozróżnić metody statyczne od niestatycznych.Jak mogę sprawdzić, czy metoda jest statyczna za pomocą odbicia?
Odpowiedz
Użyj Modifier.isStatic(method.getModifiers())
.
/**
* Returns the public static methods of a class or interface,
* including those declared in super classes and interfaces.
*/
public static List<Method> getStaticMethods(Class<?> clazz) {
List<Method> methods = new ArrayList<Method>();
for (Method method : clazz.getMethods()) {
if (Modifier.isStatic(method.getModifiers())) {
methods.add(method);
}
}
return Collections.unmodifiableList(methods);
}
Uwaga: Ta metoda jest rzeczywiście niebezpieczna z punktu widzenia bezpieczeństwa. Class.getMethods "pomija [es] menedżer SecurityManager sprawdza w zależności od modułu ładującego klasę rozmówcy" (patrz sekcja 6 wytycznych bezpiecznego kodowania Java).
Nota prawna: Nie testowano, a nawet kompilator.
Należy zachować ostrożność przy notowaniu Modifier
. Flagi oznaczone jako int nie są bezpieczne. Typowym błędem jest przetestowanie flagi modyfikatora na typie obiektu odbicia, do którego nie ma zastosowania. Może się zdarzyć, że flaga w tej samej pozycji jest ustawiona na oznaczenie innych informacji.
Aby ucieleśnić poprzedni (poprawnie) odpowiedź, tutaj jest pełna fragment kodu, który robi to, co chcesz (wyjątki ignorowane):
public Method[] getStatics(Class<?> c) {
Method[] all = c.getDeclaredMethods()
List<Method> back = new ArrayList<Method>();
for (Method m : all) {
if (Modifier.isStatic(m.getModifiers())) {
back.add(m);
}
}
return back.toArray(new Method[back.size()]);
}
można uzyskać statyczne metody tak:
for (Method m : MyClass.class.getMethods()) {
if (Modifier.isStatic(m.getModifiers()))
System.out.println("Static Method: " + m.getName());
}
- 1. Python3: sprawdzić, czy metoda jest statyczna
- 2. Jak sprawdzić, czy metoda jest statyczna w PHP?
- 3. Metoda statyczna wywołana za pomocą typu pochodnego
- 4. Jak mogę uzyskać wartość właściwości ciągu za pomocą Odbicia?
- 5. Jak sprawdzić, czy metoda jest stała?
- 6. Jak mogę sprawdzić, czy Dispatcher.DisableProcessing jest aktywny?
- 7. Jak mogę uprościć wywołanie metody rozszerzenia Linq za pomocą odbicia?
- 8. Jak określić typy właściwości za pomocą odbicia?
- 9. Dostęp Ostatnia zmienna statyczna przy użyciu odbicia
- 10. statyczna metoda bez nazwy
- 11. Jak porównać klasy za pomocą odbicia?
- 12. findViewById wewnątrz Metoda statyczna
- 13. Co to jest metoda statyczna i zmienne?
- 14. Jak sprawdzić, czy funkcja jest wywoływana za pomocą połączenia/zastosowanie
- 15. Animacja statyczna/szumowa za pomocą HTML5 Canvas
- 16. Jak wykryć "nowy" modifer na polu za pomocą odbicia?
- 17. Jak mogę sprawdzić, czy kolejka jest pusta?
- 18. Jak mogę sprawdzić, czy funkcja jest częściowa?
- 19. Jak mogę sprawdzić, czy scenarzysta jest zamknięty?
- 20. Jak mogę sprawdzić, czy wartość jest liczbą?
- 21. Niewłaściwy Metoda statyczna
- 22. Android/Java: Wywołanie metody za pomocą odbicia?
- 23. Czy mogę stwierdzić, czy właściwość jest zabrudzona za pomocą nhibernate?
- 24. Utwórz nowy obiekt za pomocą odbicia?
- 25. Jak sprawdzić, czy metoda prywatna jest zdefiniowana w ruby?
- 26. Określanie, czy metoda zastępuje inną przy użyciu odbicia?
- 27. Jak mogę sprawdzić czy blokada jest włączona bez czekania na wpisanie znaku za pomocą JavaScript?
- 28. Jak mogę sprawdzić, czy pole formularza jest poprawnie wypełnione za pomocą kapibara?
- 29. Jak mogę sprawdzić, czy aplet java jest ładowany za pomocą javascript?
- 30. Jak mogę sprawdzić, czy element jest klikalny za pomocą aplikacji nocnych?
Edytuj odpowiedź: jest modyfikatorem zamiast modyfikatorów -> Użyj Modifier.isStatic (method.getModifiers()) Thx za odpowiedź! – Telcontar
Yup, dzięki. Chociaż twierdzę, że nazwa to misdesign. Modyfikator nie reprezentuje modyfikatora. Ale cała klasa jest błędnym projektem. I prawdopodobnie także refleksja. –
btw to samo działa również dla pól, które również zapewniają metodę getModifiers() – Gregor