使用Reflections.org从父类访问带注释的方法

时间:2018-08-02 12:51:31

标签: java inheritance reflection annotations

我有这个代码

public static SelenideElement findElementByTitle(String elementName) throws IllegalAccessException {
        Set<Field> annotated = new Reflections(lastInitialized, new FieldAnnotationsScanner()).getFieldsAnnotatedWith(ElementTitle.class);

        for (Field field : annotated) {
            ElementTitle annotation = field.getAnnotation(ElementTitle.class);
            if (annotation.value().equals(elementName)) {
                field.setAccessible(true);
                SelenideElement el = (SelenideElement) field.get(page(lastInit));
                return el;
            }
        }
        throw new AutotestError("Element not found: " + elementName);

在我实际实现继承之前,它工作得很好,而且看来我的代码无法访问父类中带注释的字段。如果我设置了程序包访问权限,则由于模棱两可而导致异常(在不同的类中获得了几个相同的注释,例如“下一步”按钮)。

这是设置lastInitialized和lastInit字段的代码(PAGES_PACKAGE只是一个指向包含我所有页面对象类的包的字符串)

public static void initPage(String pageName) throws Exception {
        Set<Class<?>> annotated = new Reflections(PAGES_PACKAGE).getTypesAnnotatedWith(PageTitle.class);

        for (Class classToInit : annotated) {
            PageTitle annotation = (PageTitle) classToInit.getAnnotation(PageTitle.class);
            if (annotation.value().equals(pageName)) {
                classToInit.newInstance();
                lastInitialized = substringAfter(classToInit.toString(), "class ");
                lastInit = classToInit;
                return;
            }
        }

        throw new AutotestError("Can't find page to init: " + pageName);
    }

我想做的是,要有一个主页,其中包含网站上其他所有选项卡所具有的所有常规字段,并希望继承我网站的所有“选项卡”,同时能够以以下方式访问父字段:如果它们是我当前的页面。

0 个答案:

没有答案