【问题标题】:Understanding the below code理解下面的代码
【发布时间】:2015-09-01 07:08:46
【问题描述】:

我无法理解这段代码,他们是在方法中定义构造函数吗?我知道正在返回一个 WebElement 对象,但是这在 java 中是什么样的编码概念。

WebElement foo = wait.until(new Function() {

     public WebElement apply(WebDriver driver) {

         return driver.findElement( By.id("foo") );

     }

});

【问题讨论】:

标签: java selenium


【解决方案1】:

首先,

WebDriverWait wait = new WebDriverWait();

WebDriverWait.util 扩展自 FluentWait,定义如下

public <V> V until(Function<? super T, V> isTrue) 

所以现在您知道必须将 Function 类型传递给 until。但是 Function 只是一个接口,它有一个未实现的方法 'apply',所以你必须实现它才能使用匿名类。

其实如果你在 Selenium-Webdriver 中使用这个模式,下面是一个使用泛型的好方法

ExpectedCondition ec = new ExpectedCondition<WebElement>() {
   public WebElement apply(WebDriver d) {
            return d.findElement(By.id("cutome"));
    }
  };   

预期条件:public interface ExpectedCondition&lt;T&gt; extends Function&lt;WebDriver, T&gt; {}

【讨论】:

    【解决方案2】:

    它没有创建构造函数。相反,它正在创建一种与Function 兼容的类型。为什么要这样做? Function 是一个接口或一个抽象类(我真的不知道,编辑我的答案)这意味着它没有构造函数/它的构造函数不能被调用。那你怎么写

    new Function ()
    

    ?

    这就是花括号中的东西的来源。Function 有一个名为apply 的方法,它没有实现(抽象)。这也是不能构造抽象类和接口的一个原因。所以现在在花括号中,您在扩展Function / 实现Function 的匿名类中实现apply 方法(取决于Function 是接口还是抽象类)。但是 Java 为您完成了所有这些,因此您无需担心。上面评论中的链接非常好。您可以在那里了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2020-05-18
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多