Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们如何识别一个方法是属于抽象类还是属于接口?_Java - Fatal编程技术网

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

Java 我们如何识别一个方法是属于抽象类还是属于接口?,java,Java,我们如何识别特定方法是属于抽象类还是属于接口?有没有办法识别它?这个问题的唯一有效答案应该是: 你不想知道。如果您需要知道这一点,那么您的类设计有问题 但无论如何,至少可以通过接口的反射来实现 第一次尝试时要小心,因为这将返回false,即使它是在类的接口中声明的。(见下面的示例) 您需要使用更多的反射魔法来获得如下正确结果: public class ReflectionTest { interface Test { void test(); } class TestImpl im

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

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

你不想知道。如果您需要知道这一点,那么您的类设计有问题

但无论如何,至少可以通过接口的反射来实现

第一次尝试时要小心,因为这将返回
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
    }
}

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

你不想知道。如果您需要知道这一点,那么您的类设计有问题

但无论如何,至少可以通过接口的反射来实现

第一次尝试时要小心,因为这将返回
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
    }
}

试想一下,在现实世界中,这个场景会从哪里来,你想知道这个方法属于接口还是抽象类?试想一下,在现实世界中,这个场景会从哪里来,你想知道这个方法属于接口还是抽象类?