【问题标题】:Can a Webdriver interface be static(refer description for questions)?Webdriver 界面可以是静态的吗(请参阅问题描述)?
【发布时间】:2016-03-12 10:07:58
【问题描述】:

在编写 selenium 代码时,我看到了一个声明:-

public static WebDriver driver = new Firefox Driver();

现在我有多个问题:-

  1. WebDriver 是一个接口。接口可以是静态的吗?如果是,根据我的理解,此接口的所有方法部分也将是静态方法。
  2. 根据我对静态类/方法/变量的理解,不应将任何对象定义为静态无法实例化。但是从上面的程序语句看来,我们正在创建 WebDriver 类的新对象,尽管它是静态的。请澄清这怎么可能,或者我的理解是否存在偏差?

【问题讨论】:

    标签: java selenium


    【解决方案1】:
    • 对于#2:

      public static WebDriver driver = new Firefox Driver();
      

    上面的语句不是创建一个Webdriver接口的对象,而是创建一个FirefoxDriver类的对象。 FirefoxDriver是一个继承或实现接口WebDriver的类。

    【讨论】:

      【解决方案2】:

      首先,您对什么是静态的理解是不正确的。在public static WebDriver driver = new FirefoxDriver(); 中,WebDriver 是对象的类型,而driver 是对象的实例。当您将成员声明为static 时,它指的是它的实例,而不是它的类型。因此,您不是在“使”WebDriver 成为静态的,而是在使driver 成为静态的。

      所以问题是“接口可以是静态的吗?”根本不适用于您的情况。但是如果你不管它,答案是是的,你可以像这样定义接口,它对于父类来说是静态的:

       public class WithStaticInterface 
       {
           public static interface MyInterface
           {
               void hello();
           }
       }
      

      不过界面成员can never be static

      我建议阅读更多关于静态成员的含义。例如here:

      有时,您希望拥有所有对象共有的变量。这是通过静态修饰符完成的。在声明中带有 static 修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。

      【讨论】:

      • 感谢基里尔的回复。现在事情已经很清楚了。感谢您消除困惑。
      猜你喜欢
      • 2016-05-21
      • 2015-06-11
      • 1970-01-01
      • 2012-06-06
      • 2016-04-25
      • 2020-02-27
      • 2017-05-09
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多