Обнаружение, если метод объявлен в интерфейсе в Java - PullRequest
7 голосов
/ 23 декабря 2009

Помогите мне сделать этот метод более надежным:

 /**
  * 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;
 }

Ответы [ 5 ]

10 голосов
/ 23 декабря 2009

Как насчет этого:

try {
    interfaceClass.getMethod(method.getName(), method.getParameterTypes());
    return true;
} catch (NoSuchMethodException e) {
    return false;
}
1 голос
/ 05 января 2013

Если вы не хотите поймать NoSuchMethodException из ответ Яшая :

for (Method ifaceMethod : iface.getMethods()) {
    if (ifaceMethod.getName().equals(candidate.getName()) &&
            Arrays.equals(ifaceMethod.getParameterTypes(), candidate.getParameterTypes())) {
        return true;
    }
}
return false;
1 голос
/ 23 декабря 2009

Это хорошее начало:

Заменить:

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

с:

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

:)

0 голосов
/ 04 января 2010

Чтобы сделать ваш метод более устойчивым, вы, вероятно, также захотите проверить, возвращает ли Class#isInterface() true для данного класса и бросить IllegalArgumentException в противном случае.

0 голосов
/ 04 января 2010

См. Метод # getDeclaringClass () , затем просто сравните объекты класса с ожидаемым интерфейсом (интерфейсами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...