29

So lets say I am trying to get a method from a class using Method m = plugin.getClass().getDeclaredMethod("getFile");.

But that plugin class is extending another class, which is the one with the getFile method. I am not quite sure if that would make it throw the NoSuchMethodException exception or not.

I know the class that the plugin is extending has the getFile method. Sorry if I sound confusing, a bit tired.

1 Answer 1

79

It sounds like you just need to use getMethod instead of getDeclaredMethod. The whole point of getDeclaredMethod is that it only finds methods declared in the class you're calling it on:

Returns a Method object that reflects the specified declared method of the class or interface represented by this Class object.

Whereas getMethod has:

C is searched for any matching methods. If no matching method is found, the algorithm of step 1 is invoked recursively on the superclass of C.

That will only find public methods though. If the method you're after isn't public, you should recurse up the class hierarchy yourself, using getDeclaredMethod or getDeclaredMethods on each class in the hierarchy:

Class<?> clazz = plugin.getClass();
while (clazz != null) {
    Method[] methods = clazz.getDeclaredMethods();
    for (Method method : methods) {
        // Test any other things about it beyond the name...
        if (method.getName().equals("getFile") && ...) {
            return method;
        }
    }
    clazz = clazz.getSuperclass();
}
Sign up to request clarification or add additional context in comments.

3 Comments

If it helps, the reason I am using this is due to the method being private in the first place. Annd then you edit. Alright, I'll try the edit.
@Ultimate: Well yes, that's pretty important. It would have helped if you'd mentioned that to start with.
Well, this was a while back. Sorry for not accepting this!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.