0

特定のメソッドが抽象クラスまたはインターフェイスに属しているかどうかをどのように識別できますか? それを識別する方法はありますか?

4

1 に答える 1

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
    }
}
于 2013-10-19T08:23:38.743 に答える