我们如何识别方法是属于抽象类还是接口?

时间:2013-10-19 08:03:46

标签: java

我们如何识别特定方法是属于抽象类还是接口?有没有办法识别它?

1 个答案:

答案 0 :(得分:4)

这个问题的唯一有效答案应该是:

你不想知道这一点。如果你需要知道,你的课程设计有问题。

但是你可以通过至少对接口的反射来做到这一点。

第一次尝试时要小心,因为这将返回false,即使它是在类的接口中声明的。 (见下面的例子)

TestImpl.class.getMethod("test").getDeclaringClass().isInterface(); // false

你需要做更多的反射魔法才能得到正确的结果:

public class ReflectionTest {

interface Test {
    void test();
}

class TestImpl implements Test {

    @Override
    public void test() {
    }

}

private static boolean isInterfaceMethod(Class clazz, String methodName) throws NoSuchMethodException, SecurityException {
    for (Class interfaze : clazz.getMethod(methodName).getDeclaringClass().getInterfaces()) {
        for (Method method : interfaze.getMethods()) {
            if (method.getName().equals(methodName)) {
                return true;
            }
        }
    }

    return false;
}

public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        System.out.println(isInterfaceMethod(TestImpl.class, "test")); // true
    }
}