Java - получение списка полей, которые имеют общий суперкласс от объекта - PullRequest
0 голосов
/ 07 марта 2019

Я хочу получить список полей, имеющих общий суперкласс, из объекта, а затем выполнить итерации по ним и выполнить метод, существующий в суперклассе.Пример:

class BasePage{
***public void check(){}***
}

class Page extends BasePage{
    private TextElement c;
    private ButtonElement e;

    //methods acting on c and e
}

class TextElement extends BaseElement {

}

class ButtonElement extends BaseElement {

}

class BaseElement {
    public void exits(){};
}

Итак, из класса BasePage я хочу реализовать метод проверки, который должен анализировать список полей страницы, затем получить список полей, имеющих суперкласс baseElement, затем для каждогоодин запуск метод существует.Я подтверждаю, что это не дубликат приватных полей отражения

1 Ответ

2 голосов
/ 07 марта 2019

Следующий код должен делать то, что вы ожидаете.Я отметил, что код делает и как он работает в комментариях.

public static void main(String[] args) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    Page page = new Page();
    Collection<Field> fields = getFieldsWithSuperclass(page.getClass(), BaseElement.class);
    for(Field field : fields) { //iterate over all fields found
        field.setAccessible(true);
        BaseElement fieldInstance = (BaseElement) field.get(pageCreated); //get the instance corresponding to the field from the given class instance
        fieldInstance.exists(); //call the method
    }
}

private static Collection<Field> getFieldsWithSuperclass(Class instance, Class<?> superclass) {
    Field[] fields = instance.getDeclaredFields(); //gets all fields from the class

    ArrayList<Field> fieldsWithSuperClass = new ArrayList<>(); //initialize empty list of fields
    for(Field field : fields) { //iterate over fields in the given instance
        Class fieldClass = field.getType(); //get the type (class) of the field
        if(superclass.isAssignableFrom(fieldClass)) { //check if the given class is a super class of this field
            fieldsWithSuperClass.add(field); //if so, add it to the list
        }
    }
    return fieldsWithSuperClass; //return all fields which have the fitting superclass
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...