2

子クラス オブジェクトを親クラス参照に割り当てています。リフレクションを使用して、子クラスのセッター メソッドにアクセスしたいと考えています。子クラスのセッター メソッドを取得できますが、親クラス オブジェクトのセッター メソッドも取得できます。メソッド名をハードコーディングすることで、親クラスの setter メソッドを明示的にチェックしています。どうすればこれを回避できますか?

public abstract class A {

String val;

public String getVal() {
    return val;
}

public void setVal(String val) {
    this.val = val;
}
}



public class B  extends A{

String valB;

public String getValB() {
    return valB;
}

public void setValB(String valB) {
    this.valB = valB;
}

}

A a  = new B();

        for (Method method : a.getClass().getMethods()){
             if (isSetter(method) && !(checkUnwantedMethods(method.getName()))) {
                 method.invoke(a, "someValue");
             }
         }

        public static boolean isSetter(Method method){
              if(!method.getName().startsWith("set")) return false;
              if(method.getParameterTypes().length != 1) return false;
              return true;
        }

        public boolean checkUnwantedMethods(String methodName){

            return (methodName.equals("setVal");

        }
4

1 に答える 1

3

使用getDeclaredMethods()するだけで、継承されたメソッドを除いて、実際のランタイム オブジェクトのメソッドのみが提供されます (つまり、動的バインディングを考慮します)。

getMethods()継承されたメソッドも取得する問題。

于 2013-03-02T06:05:29.613 に答える