如何在Java中使用反射时避免使用父对象方法

时间:2013-03-02 05:51:28

标签: java reflection

我将子类对象分配给父类引用。使用反射我想访问子类setter方法。我能够获得子类的setter方法,但也获得了父类对象的setter方法。我现在通过对方法名称进行硬编码来显式检查父类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");

        }

1 个答案:

答案 0 :(得分:3)

只需使用getDeclaredMethods(),它只会为您提供实际运行时对象的方法(即考虑动态绑定),不包括继承的方法。

getMethods()检索继承方法的问题。