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