检查接口中是否声明了方法

问题描述 投票:0回答:1

我想检查一个类的方法是否在接口中声明。

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()
为这两种方法返回相同的类。那么如何检查哪一个是真实的呢?

java reflection
1个回答
0
投票

您可以比较类和接口:

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());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.