使用Java在子类中强制执行和使用静态变量
我想在超类静态方法中使用来自子类的静态变量。似乎我无法确保变量存在,因为它是静态的,我无法以这种方式强制执行静态成员 实际上,我希望在功能上与此类似:使用Java在子类中强制执行和使用静态变量,java,design-patterns,Java,Design Patterns,我想在超类静态方法中使用来自子类的静态变量。似乎我无法确保变量存在,因为它是静态的,我无法以这种方式强制执行静态成员 实际上,我希望在功能上与此类似: protected class Page { static WebDriver driver = new ChromeWebDriver(); public static boolean onPage () { return driver.findElements(By.id(PAGE_NAME)) != null
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()不接受任何参数
- 你不能按原样去做。但是,在基类中有一个最终字段,并强制每个驱动类向超级构造函数提供一个参数,如下所示
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,并在驱动类中实现它您应该问自己的问题:为什么要这样做?换句话说:为什么这比返回页面名称的非静态抽象方法更好?在您的示例中,调用
Page.onPage()
如何告诉您在哪个页面上?这在Java中是不可能做到的。注意:无论如何,您不能像这样访问驱动程序。@KyleShrader根本不使用static。静态和继承是无神论。没有状态并不意味着使用静态。(使用static也不意味着缺少状态)。不幸的是,到目前为止,我必须保证页面是静态的(@KyleShrader这并没有让不可能成为可能。@KyleShrader祝你好运。