Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I check if a method is static using reflection?

I want to discover at run-time ONLY the static Methods of a class, how can I do this? Or, how to differentiate between static and non-static methods.

like image 880
Telcontar Avatar asked Nov 13 '08 17:11

Telcontar


People also ask

How do you call a static method using reflection?

In the example above, we first obtain the instance of the class we want to test, which is GreetingAndBye. After we have the class instance, we can get the public static method object by calling the getMethod method. Once we hold the method object, we can invoke it simply by calling the invoke method.

Which method is used to get methods using reflection?

The getConstructors() method is used to get the public constructors of the class to which an object belongs. The getMethods() method is used to get the public methods of the class to which an object belongs.


1 Answers

Use 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); } 

Note: This method is actually dangerous from a security standpoint. Class.getMethods "bypass[es] SecurityManager checks depending on the immediate caller's class loader" (see section 6 of the Java secure coding guidelines).

Disclaimer: Not tested or even compiled.

Note Modifier should be used with care. Flags represented as ints are not type safe. A common mistake is to test a modifier flag on a type of reflection object that it does not apply to. It may be the case that a flag in the same position is set to denote some other information.

like image 83
Tom Hawtin - tackline Avatar answered Oct 04 '22 15:10

Tom Hawtin - tackline