2013-03-02 2 views
2

Я назначаю объект дочернего класса ссылкой на родительский класс. Используя отражение, я хочу получить доступ к методам установки дочерних классов. Я могу получить методы set set для дочерних классов, но также получаю метод 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

Смежные вопросы