私はインターフェイスがあるとします。広げる平等のチェック
public interface FooInterface {
public void someMethod();
}
を、私はこのインタフェースを実装するクラスを持っている:
public class FooClass implements FooInterface {
public void someMethod() {
//do cool things
}
public void someOtherMethod() {
//do other cool things
}
}
は見つけるための簡単な方法は反射的、あり、 FooInterfaceのsomeMethodまでマップするFooClassのメソッド?
私はこの計算を次のようにしていますが、この計算を行うためにJavaで組み込みのシステムを知っている人は誰でも知りたいですか?私は次のコードを実行しました(バグがあるかもしれませんので、注意してください)。
public boolean isMethodEquality(Method meth1, Method meth2) {
//Check declaring classes for equality
boolean isAssignable;
isAssignable = meth1.getDeclaringClass().isAssignableFrom(
meth2.getDeclaringClass();
isAssignable |= meth2.getDeclaringClass().isAssignableFrom(
meth1.getDeclaringClass());
if (!isAssignable) {
return false;
}
//check the names for equality
if (!meth1.getName().equals(meth2.getName())) {
return false;
}
//check the parameters for equality
if (meth1.getParameterTypes().length != meth2.getParameterTypes().length) {
return false;
}
for (int i = 0; i < meth1.getParameterTypes().length; i++) {
if (!meth1.getParameterTypes()[i].equals(meth2.getParameterTypes()[i])) {
return false;
}
}
return true;
}
上記は署名をチェックする必要があります。これを行うための組み込みの方法がありますか?
私は.equalsに同意しましたが、これはうまくいかず、意味があります。これらのメソッドは、同じメソッドの異なる実装パターンです(ここでは、1つは定義のない宣言で、もう1つは定義です)。
はまた、私は単純に継承注釈を追加することができます実現が、それはクラスの爆発につながった可能ように私はこれを避けることを好むだろう。
コメンターの1で述べたように、注釈はクラスのみに継承します。詳細については、java docsを参照してください。
私が本当に探しているのは、メソッドのための "isAssignableFrom"、またはメソッドのシグネチャを簡単に比較する方法です。
ありがとうございました。
コードであることを... –
コードを整形して、文字化けが少なくなるように編集しました:-) –
whoops - それはプレビューで文字化けしていませんでした - それをさせてください – aperkins