2013-03-02 58 views
2

我将一个子类对象分配给父类引用。使用反射我想访问子类的setter方法。我能够得到子类的setter方法,但也得到父类对象的setter方法。我现在通过硬编码方法名来显式检查父类的setter方法。我怎样才能避免这种情况?如何避免在Java中使用反射时的父对象方法

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"); 

     } 

回答

3

只要使用getDeclaredMethods(),它会给你只是实际运行时对象的方法(即考虑到动态绑定),不包括继承的方法。

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

+0

非常感谢:) ..它的工作 – JSFUser 2013-03-02 06:37:51

相关问题