2015-09-01 78 views
-3

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

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

    public WebElement apply(WebDriver driver) { 

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

    } 

}); 
+0

其呼叫使得一个匿名类 –

+2

看看https://开头的文档.oracle.com/JavaSE的/教程/ JAVA/javaOO/anonymousclasses.html –

回答

0

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

new Function() 

这是花括号中的东西进来的地方。Function有一个名为apply的方法,它没有实现(抽象)。这也是你不能构造抽象类和接口的原因。因此,现在在花括号中,您在一个匿名类中实现了apply方法,该类延伸了Function/implements Function(取决于Function是接口还是抽象类)。但是Java为你做了所有这些,所以你不必担心。上述评论中的链接非常好。你可以在那里了解更多。

1

首先,

WebDriverWait wait = new WebDriverWait(); 

WebDriverWait.util从FluentWait延伸,这样

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

这样定义的,现在你知道你必须通过一个函数类型,直到。但函数只是一个接口,它有一个未实现的方法'应用',所以你必须实现它,然后你可以使用匿名类。

其实,如果你使用硒webdriver的这种模式,以下是通用

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

ExpectedCondition一个好办法:public interface ExpectedCondition<T> extends Function<WebDriver, T> {}