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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With