我想检查一个类的方法是否在接口中声明。
AInterface.java:
public interface AInterface {
Object hi();
}
AClass.java:
public class AClass implements AInterface {
public String hi() {
return "hello!";
}
}
Main.java:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
for (Method md : AClass.class.getDeclaredMethods()) {
System.out.println("Declaring class: " + md.getDeclaringClass().getName());
System.out.println("Return type: " + md.getReturnType().getName());
System.out.println("Name: " + md.getName());
System.out.println();
}
}
}
md.getDeclaringClass()
为这两种方法返回相同的类。那么如何检查哪一个是真实的呢?
您可以比较类和接口:
Class<?> clazz = AClass.class;
Class<?> interfce = AInterface.class;
for (Method method : interfce.getDeclaredMethods()) {
Method overriddenMethod = null;
// Iterate
for (Method classMethod : clazz.getDeclaredMethods()) {
if (classMethod.getName().equals(method.getName()) && classMethod.getReturnType().isAssignableFrom(method.getReturnType())) {
overriddenMethod = classMethod;
break;
}
}
// Class Method
if (overriddenMethod != null) {
System.out.println("Method " + method.getName() + " is overridden in class " + clazz.getName());
// Interface Method (not implemented)
} else {
System.out.println("Method " + method.getName() + " is not overridden in class " + clazz.getName());
}
}