Detecting if a method is declared in a Java interface

Help me make this method more robust:

/** * Check if the method is declared in the interface. * Assumes the method was obtained from a concrete class that * implements the interface, and return true if the method overrides * a method from the interface. */ public static boolean isDeclaredInInterface(Method method, Class<?> interfaceClass) { for (Method methodInInterface : interfaceClass.getMethods()) { if (methodInInterface.getName().equals(method.getName())) return true; } return false; } 
+7
java reflection methods
source share
5 answers

How about this:

 try { interfaceClass.getMethod(method.getName(), method.getParameterTypes()); return true; } catch (NoSuchMethodException e) { return false; } 
+10
source share

This is a good start:

Replace:

 for (Method methodInInterface : interfaceClass.getMethods()) { if (methodInInterface.getName().equals(method.getName())) return true; } 

from:

 for (Method methodInInterface : interfaceClass.getMethods()) { if (methodInInterface.getName().equals(method.getName())) { return true; } } 

:)

+1
source share

If you want to avoid catch the NoSuchMethodException from Yashai's answer :

 for (Method ifaceMethod : iface.getMethods()) { if (ifaceMethod.getName().equals(candidate.getName()) && Arrays.equals(ifaceMethod.getParameterTypes(), candidate.getParameterTypes())) { return true; } } return false; 
+1
source share

See the # getDeclaringClass () Method , and then simply compare the class objects with the expected interface.

0
source share

To make your method more reliable, you probably also want to check if Class#isInterface() returns true for the given class and throws an IllegalArgumentException otherwise.

0
source share

All Articles