使用Java

时间:2016-04-22 22:14:15

标签: java design-patterns

我想在超类静态方法中使用来自子类的静态变量。似乎我无法确保变量存在,因为它是静态的,我不能以这种方式强制执行静态成员。

很高兴,我想在功能上做类似的事情:

protected class Page {
    static WebDriver driver = new ChromeWebDriver();
    public static boolean onPage () {
        return driver.findElements(By.id(PAGE_NAME)) != null;
    }
}

public class HomePage extends Page {
    static String PAGE_NAME = "home";
}

public class LoginPage extends Page {
    static String PAGE_NAME = "login";
}

...
HomePage.onPage();
...

这样的事情的最佳模式是什么?

注意:主要要求是:

  • onPage()保持静态
  • onPage()不带参数

1 个答案:

答案 0 :(得分:1)

你不能这样做。但是你在基类中有一个final字段并强制每个驱动类为超级构造函数提供一个参数,如下所示

public abstract class Page {

    final String pageName;

    public Page(String title) {
        pageName = title;
    }
   //the rest implementation
}

然后你可以拥有像

这样的网页
public class HomePage extends Page
 {

    public HomePage()
      {
       super("home");
      } 
  }

另一种选择是在基页中提供抽象的getPageName并在驱动的类中实现它