帮助我让这个方法更加扎实:
/**
* 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;
}
答案 0 :(得分:10)
这个怎么样:
try {
interfaceClass.getMethod(method.getName(), method.getParameterTypes());
return true;
} catch (NoSuchMethodException e) {
return false;
}
答案 1 :(得分:1)
这是一个好的开始:
替换:
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;
}
}
:)
答案 2 :(得分:1)
如果您想避免从Yashai's answer抓取NoSuchMethodException
:
for (Method ifaceMethod : iface.getMethods()) {
if (ifaceMethod.getName().equals(candidate.getName()) &&
Arrays.equals(ifaceMethod.getParameterTypes(), candidate.getParameterTypes())) {
return true;
}
}
return false;
答案 3 :(得分:0)
为了使您的方法更加健壮,您可能还想检查Class#isInterface()
是否为给定的类返回true
,否则抛出IllegalArgumentException
。
答案 4 :(得分:-1)
参见Method#getDeclaringClass(),然后只将Class对象与预期的接口进行比较。